{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"5案例评分卡.ipynb","version":"0.3.2","provenance":[],"collapsed_sections":[],"toc_visible":true},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"cells":[{"metadata":{"id":"4R80fwtxgIva","colab_type":"code","colab":{}},"cell_type":"code","source":["import pandas as pd\n","import numpy as np"],"execution_count":0,"outputs":[]},{"metadata":{"id":"3BL-xXYvgIvg","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":241},"outputId":"6e0c6c2a-ec95-4bb3-abc1-e1e39790e4ab","executionInfo":{"status":"ok","timestamp":1546352126650,"user_tz":-480,"elapsed":1477,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["path=r'rankingcard.csv'\n","data=pd.read_csv(path,index_col=0)\n","data.head()"],"execution_count":124,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>SeriousDlqin2yrs</th>\n","      <th>RevolvingUtilizationOfUnsecuredLines</th>\n","      <th>age</th>\n","      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n","      <th>DebtRatio</th>\n","      <th>MonthlyIncome</th>\n","      <th>NumberOfOpenCreditLinesAndLoans</th>\n","      <th>NumberOfTimes90DaysLate</th>\n","      <th>NumberRealEstateLoansOrLines</th>\n","      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n","      <th>NumberOfDependents</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>1</th>\n","      <td>1</td>\n","      <td>0.766127</td>\n","      <td>45</td>\n","      <td>2</td>\n","      <td>0.802982</td>\n","      <td>9120.0</td>\n","      <td>13</td>\n","      <td>0</td>\n","      <td>6</td>\n","      <td>0</td>\n","      <td>2.0</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>0</td>\n","      <td>0.957151</td>\n","      <td>40</td>\n","      <td>0</td>\n","      <td>0.121876</td>\n","      <td>2600.0</td>\n","      <td>4</td>\n","      <td>0</td>\n","      <td>0</td>\n","      <td>0</td>\n","      <td>1.0</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>0</td>\n","      <td>0.658180</td>\n","      <td>38</td>\n","      <td>1</td>\n","      <td>0.085113</td>\n","      <td>3042.0</td>\n","      <td>2</td>\n","      <td>1</td>\n","      <td>0</td>\n","      <td>0</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>0</td>\n","      <td>0.233810</td>\n","      <td>30</td>\n","      <td>0</td>\n","      <td>0.036050</td>\n","      <td>3300.0</td>\n","      <td>5</td>\n","      <td>0</td>\n","      <td>0</td>\n","      <td>0</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>5</th>\n","      <td>0</td>\n","      <td>0.907239</td>\n","      <td>49</td>\n","      <td>1</td>\n","      <td>0.024926</td>\n","      <td>63588.0</td>\n","      <td>7</td>\n","      <td>0</td>\n","      <td>1</td>\n","      <td>0</td>\n","      <td>0.0</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["   SeriousDlqin2yrs  RevolvingUtilizationOfUnsecuredLines  age  \\\n","1                 1                              0.766127   45   \n","2                 0                              0.957151   40   \n","3                 0                              0.658180   38   \n","4                 0                              0.233810   30   \n","5                 0                              0.907239   49   \n","\n","   NumberOfTime30-59DaysPastDueNotWorse  DebtRatio  MonthlyIncome  \\\n","1                                     2   0.802982         9120.0   \n","2                                     0   0.121876         2600.0   \n","3                                     1   0.085113         3042.0   \n","4                                     0   0.036050         3300.0   \n","5                                     1   0.024926        63588.0   \n","\n","   NumberOfOpenCreditLinesAndLoans  NumberOfTimes90DaysLate  \\\n","1                               13                        0   \n","2                                4                        0   \n","3                                2                        1   \n","4                                5                        0   \n","5                                7                        0   \n","\n","   NumberRealEstateLoansOrLines  NumberOfTime60-89DaysPastDueNotWorse  \\\n","1                             6                                     0   \n","2                             0                                     0   \n","3                             0                                     0   \n","4                             0                                     0   \n","5                             1                                     0   \n","\n","   NumberOfDependents  \n","1                 2.0  \n","2                 1.0  \n","3                 0.0  \n","4                 0.0  \n","5                 0.0  "]},"metadata":{"tags":[]},"execution_count":124}]},{"metadata":{"id":"O51b9QT2guqw","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":289},"outputId":"2775ebb7-1622-40ff-f50f-1a674bfa533f","executionInfo":{"status":"ok","timestamp":1546343630157,"user_tz":-480,"elapsed":13439,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["data.info()"],"execution_count":45,"outputs":[{"output_type":"stream","text":["<class 'pandas.core.frame.DataFrame'>\n","Int64Index: 150000 entries, 1 to 150000\n","Data columns (total 11 columns):\n","SeriousDlqin2yrs                        150000 non-null int64\n","RevolvingUtilizationOfUnsecuredLines    150000 non-null float64\n","age                                     150000 non-null int64\n","NumberOfTime30-59DaysPastDueNotWorse    150000 non-null int64\n","DebtRatio                               150000 non-null float64\n","MonthlyIncome                           120269 non-null float64\n","NumberOfOpenCreditLinesAndLoans         150000 non-null int64\n","NumberOfTimes90DaysLate                 150000 non-null int64\n","NumberRealEstateLoansOrLines            150000 non-null int64\n","NumberOfTime60-89DaysPastDueNotWorse    150000 non-null int64\n","NumberOfDependents                      146076 non-null float64\n","dtypes: float64(4), int64(7)\n","memory usage: 13.7 MB\n"],"name":"stdout"}]},{"metadata":{"id":"_5r98a0olVam","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":289},"outputId":"8857be68-fbc2-4b67-ae22-2b6f6a35166b","executionInfo":{"status":"ok","timestamp":1546352132723,"user_tz":-480,"elapsed":1314,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#去除重复值\n","data.drop_duplicates(inplace=True)\n","data.info()"],"execution_count":125,"outputs":[{"output_type":"stream","text":["<class 'pandas.core.frame.DataFrame'>\n","Int64Index: 149391 entries, 1 to 150000\n","Data columns (total 11 columns):\n","SeriousDlqin2yrs                        149391 non-null int64\n","RevolvingUtilizationOfUnsecuredLines    149391 non-null float64\n","age                                     149391 non-null int64\n","NumberOfTime30-59DaysPastDueNotWorse    149391 non-null int64\n","DebtRatio                               149391 non-null float64\n","MonthlyIncome                           120170 non-null float64\n","NumberOfOpenCreditLinesAndLoans         149391 non-null int64\n","NumberOfTimes90DaysLate                 149391 non-null int64\n","NumberRealEstateLoansOrLines            149391 non-null int64\n","NumberOfTime60-89DaysPastDueNotWorse    149391 non-null int64\n","NumberOfDependents                      145563 non-null float64\n","dtypes: float64(4), int64(7)\n","memory usage: 13.7 MB\n"],"name":"stdout"}]},{"metadata":{"id":"kcWpmPpglqWb","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"6fa07127-81a3-47d1-b165-83b5ead65b66","executionInfo":{"status":"ok","timestamp":1546352136267,"user_tz":-480,"elapsed":1178,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["data.shape[0]"],"execution_count":126,"outputs":[{"output_type":"execute_result","data":{"text/plain":["149391"]},"metadata":{"tags":[]},"execution_count":126}]},{"metadata":{"id":"SO7HOOXqlVrb","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":289},"outputId":"5a28dc0e-13dc-4c79-b94c-484cde22e11f","executionInfo":{"status":"ok","timestamp":1546352138938,"user_tz":-480,"elapsed":1509,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#删除之后千万不要忘记，恢复索引\n","data.index = range(data.shape[0])\n","data.info()"],"execution_count":127,"outputs":[{"output_type":"stream","text":["<class 'pandas.core.frame.DataFrame'>\n","RangeIndex: 149391 entries, 0 to 149390\n","Data columns (total 11 columns):\n","SeriousDlqin2yrs                        149391 non-null int64\n","RevolvingUtilizationOfUnsecuredLines    149391 non-null float64\n","age                                     149391 non-null int64\n","NumberOfTime30-59DaysPastDueNotWorse    149391 non-null int64\n","DebtRatio                               149391 non-null float64\n","MonthlyIncome                           120170 non-null float64\n","NumberOfOpenCreditLinesAndLoans         149391 non-null int64\n","NumberOfTimes90DaysLate                 149391 non-null int64\n","NumberRealEstateLoansOrLines            149391 non-null int64\n","NumberOfTime60-89DaysPastDueNotWorse    149391 non-null int64\n","NumberOfDependents                      145563 non-null float64\n","dtypes: float64(4), int64(7)\n","memory usage: 12.5 MB\n"],"name":"stdout"}]},{"metadata":{"id":"ey1OCewOlVxD","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"1d6d3a0b-86c8-494e-ef09-4d6ea66b2e70","executionInfo":{"status":"ok","timestamp":1546352143252,"user_tz":-480,"elapsed":2269,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["data.index"],"execution_count":128,"outputs":[{"output_type":"execute_result","data":{"text/plain":["RangeIndex(start=0, stop=149391, step=1)"]},"metadata":{"tags":[]},"execution_count":128}]},{"metadata":{"id":"RaVQwSU8GvIF","colab_type":"text"},"cell_type":"markdown","source":["# 填补缺失值"]},{"metadata":{"id":"gmf2ULZVlV0b","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":221},"outputId":"426d93e7-ae42-45bf-a47b-40bb6fa46970","executionInfo":{"status":"ok","timestamp":1546352146194,"user_tz":-480,"elapsed":1703,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["data.isnull().sum()/data.shape[0]"],"execution_count":129,"outputs":[{"output_type":"execute_result","data":{"text/plain":["SeriousDlqin2yrs                        0.000000\n","RevolvingUtilizationOfUnsecuredLines    0.000000\n","age                                     0.000000\n","NumberOfTime30-59DaysPastDueNotWorse    0.000000\n","DebtRatio                               0.000000\n","MonthlyIncome                           0.195601\n","NumberOfOpenCreditLinesAndLoans         0.000000\n","NumberOfTimes90DaysLate                 0.000000\n","NumberRealEstateLoansOrLines            0.000000\n","NumberOfTime60-89DaysPastDueNotWorse    0.000000\n","NumberOfDependents                      0.025624\n","dtype: float64"]},"metadata":{"tags":[]},"execution_count":129}]},{"metadata":{"id":"lnj0PpBUlV4i","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":221},"outputId":"6bf8f1a8-18f4-4fa9-abcf-8a17938a3f66","executionInfo":{"status":"ok","timestamp":1546352149614,"user_tz":-480,"elapsed":1773,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["data.isnull().mean()"],"execution_count":130,"outputs":[{"output_type":"execute_result","data":{"text/plain":["SeriousDlqin2yrs                        0.000000\n","RevolvingUtilizationOfUnsecuredLines    0.000000\n","age                                     0.000000\n","NumberOfTime30-59DaysPastDueNotWorse    0.000000\n","DebtRatio                               0.000000\n","MonthlyIncome                           0.195601\n","NumberOfOpenCreditLinesAndLoans         0.000000\n","NumberOfTimes90DaysLate                 0.000000\n","NumberRealEstateLoansOrLines            0.000000\n","NumberOfTime60-89DaysPastDueNotWorse    0.000000\n","NumberOfDependents                      0.025624\n","dtype: float64"]},"metadata":{"tags":[]},"execution_count":130}]},{"metadata":{"id":"X--9eCKHJc9G","colab_type":"text"},"cell_type":"markdown","source":["## 使用均值填补“家属人数”"]},{"metadata":{"id":"ClrTmlZSIhpo","colab_type":"code","colab":{}},"cell_type":"code","source":["data[\"NumberOfDependents\"].fillna(int(data[\"NumberOfDependents\"].mean()),inplace=True)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"scuAPwTsKeHa","colab_type":"text"},"cell_type":"markdown","source":["## 随机森林填补收入"]},{"metadata":{"id":"cGjM_dQSIh08","colab_type":"code","colab":{}},"cell_type":"code","source":["def fill_missing_rf(X,y,to_fill):\n","    \"\"\"\n","    使用随机森林填补一个特征的缺失值的函数\n","    参数：\n","    X：要填补的特征矩阵\n","    y：完整的，没有缺失值的标签\n","    to_fill：字符串，要填补的那一列的名称\n","    \"\"\"\n","    #构建我们的新特征矩阵和新标签\n","    df = X.copy()\n","    fill = df.loc[:,to_fill]\n","    df = pd.concat([df.loc[:,df.columns != to_fill],pd.DataFrame(y)],axis=1)\n","    #找出我们的训练集和测试集\n","    Ytrain = fill[fill.notnull()]\n","    Ytest = fill[fill.isnull()]\n","    Xtrain = df.iloc[Ytrain.index,:]\n","    Xtest = df.iloc[Ytest.index,:]\n","    #用随机森林回归来填补缺失值\n","    from sklearn.ensemble import RandomForestRegressor as rfr\n","    rfr = rfr(n_estimators=100)\n","    rfr = rfr.fit(Xtrain, Ytrain)\n","    Ypredict = rfr.predict(Xtest)\n","    return Ypredict"],"execution_count":0,"outputs":[]},{"metadata":{"id":"_VYUPjXAIh66","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"d95b386a-846a-4e9d-9214-5bd0f4d9696b","executionInfo":{"status":"ok","timestamp":1546352162218,"user_tz":-480,"elapsed":958,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["X = data.iloc[:,1:]\n","y = data[\"SeriousDlqin2yrs\"]\n","X.shape"],"execution_count":133,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(149391, 10)"]},"metadata":{"tags":[]},"execution_count":133}]},{"metadata":{"id":"verW00W2Ih-i","colab_type":"code","colab":{}},"cell_type":"code","source":["#=====【TIME WARNING：1 min】=====#\n","y_pred = fill_missing_rf(X,y,\"MonthlyIncome\")"],"execution_count":0,"outputs":[]},{"metadata":{"id":"A2lv2ANDKQfx","colab_type":"code","colab":{}},"cell_type":"code","source":["#确认我们的结果合理之后，我们就可以将数据覆盖了\n","data.loc[data.loc[:,\"MonthlyIncome\"].isnull(),\"MonthlyIncome\"] = y_pred"],"execution_count":0,"outputs":[]},{"metadata":{"id":"v7p8t3VQIiEx","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":289},"outputId":"2da0810b-073d-423f-8132-89b22559b09c","executionInfo":{"status":"ok","timestamp":1546352170771,"user_tz":-480,"elapsed":1771,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["data.info()"],"execution_count":135,"outputs":[{"output_type":"stream","text":["<class 'pandas.core.frame.DataFrame'>\n","RangeIndex: 149391 entries, 0 to 149390\n","Data columns (total 11 columns):\n","SeriousDlqin2yrs                        149391 non-null int64\n","RevolvingUtilizationOfUnsecuredLines    149391 non-null float64\n","age                                     149391 non-null int64\n","NumberOfTime30-59DaysPastDueNotWorse    149391 non-null int64\n","DebtRatio                               149391 non-null float64\n","MonthlyIncome                           149391 non-null float64\n","NumberOfOpenCreditLinesAndLoans         149391 non-null int64\n","NumberOfTimes90DaysLate                 149391 non-null int64\n","NumberRealEstateLoansOrLines            149391 non-null int64\n","NumberOfTime60-89DaysPastDueNotWorse    149391 non-null int64\n","NumberOfDependents                      149391 non-null float64\n","dtypes: float64(4), int64(7)\n","memory usage: 12.5 MB\n"],"name":"stdout"}]},{"metadata":{"id":"XEfo7HhXPbSU","colab_type":"text"},"cell_type":"markdown","source":["## 异常值"]},{"metadata":{"id":"ZhqH3i-9IiCm","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":444},"outputId":"e0c28849-f4a5-499a-c13a-db39ebe7d537","executionInfo":{"status":"ok","timestamp":1546352175181,"user_tz":-480,"elapsed":2426,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#描述性统计\n","data.describe([0.01,0.1,0.25,.5,.75,.9,.99]).T"],"execution_count":136,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>count</th>\n","      <th>mean</th>\n","      <th>std</th>\n","      <th>min</th>\n","      <th>1%</th>\n","      <th>10%</th>\n","      <th>25%</th>\n","      <th>50%</th>\n","      <th>75%</th>\n","      <th>90%</th>\n","      <th>99%</th>\n","      <th>max</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>SeriousDlqin2yrs</th>\n","      <td>149391.0</td>\n","      <td>0.066999</td>\n","      <td>0.250021</td>\n","      <td>0.0</td>\n","      <td>0.0</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>1.000000</td>\n","      <td>1.0</td>\n","    </tr>\n","    <tr>\n","      <th>RevolvingUtilizationOfUnsecuredLines</th>\n","      <td>149391.0</td>\n","      <td>6.071087</td>\n","      <td>250.263672</td>\n","      <td>0.0</td>\n","      <td>0.0</td>\n","      <td>0.003199</td>\n","      <td>0.030132</td>\n","      <td>0.154235</td>\n","      <td>0.556494</td>\n","      <td>0.978007</td>\n","      <td>1.093922</td>\n","      <td>50708.0</td>\n","    </tr>\n","    <tr>\n","      <th>age</th>\n","      <td>149391.0</td>\n","      <td>52.306237</td>\n","      <td>14.725962</td>\n","      <td>0.0</td>\n","      <td>24.0</td>\n","      <td>33.000000</td>\n","      <td>41.000000</td>\n","      <td>52.000000</td>\n","      <td>63.000000</td>\n","      <td>72.000000</td>\n","      <td>87.000000</td>\n","      <td>109.0</td>\n","    </tr>\n","    <tr>\n","      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n","      <td>149391.0</td>\n","      <td>0.393886</td>\n","      <td>3.852953</td>\n","      <td>0.0</td>\n","      <td>0.0</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>1.000000</td>\n","      <td>4.000000</td>\n","      <td>98.0</td>\n","    </tr>\n","    <tr>\n","      <th>DebtRatio</th>\n","      <td>149391.0</td>\n","      <td>354.436740</td>\n","      <td>2041.843455</td>\n","      <td>0.0</td>\n","      <td>0.0</td>\n","      <td>0.034991</td>\n","      <td>0.177441</td>\n","      <td>0.368234</td>\n","      <td>0.875279</td>\n","      <td>1275.000000</td>\n","      <td>4985.100000</td>\n","      <td>329664.0</td>\n","    </tr>\n","    <tr>\n","      <th>MonthlyIncome</th>\n","      <td>149391.0</td>\n","      <td>5424.665952</td>\n","      <td>13236.156261</td>\n","      <td>0.0</td>\n","      <td>0.0</td>\n","      <td>0.170000</td>\n","      <td>1800.000000</td>\n","      <td>4420.000000</td>\n","      <td>7416.000000</td>\n","      <td>10800.000000</td>\n","      <td>23256.100000</td>\n","      <td>3008750.0</td>\n","    </tr>\n","    <tr>\n","      <th>NumberOfOpenCreditLinesAndLoans</th>\n","      <td>149391.0</td>\n","      <td>8.480892</td>\n","      <td>5.136515</td>\n","      <td>0.0</td>\n","      <td>0.0</td>\n","      <td>3.000000</td>\n","      <td>5.000000</td>\n","      <td>8.000000</td>\n","      <td>11.000000</td>\n","      <td>15.000000</td>\n","      <td>24.000000</td>\n","      <td>58.0</td>\n","    </tr>\n","    <tr>\n","      <th>NumberOfTimes90DaysLate</th>\n","      <td>149391.0</td>\n","      <td>0.238120</td>\n","      <td>3.826165</td>\n","      <td>0.0</td>\n","      <td>0.0</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>3.000000</td>\n","      <td>98.0</td>\n","    </tr>\n","    <tr>\n","      <th>NumberRealEstateLoansOrLines</th>\n","      <td>149391.0</td>\n","      <td>1.022391</td>\n","      <td>1.130196</td>\n","      <td>0.0</td>\n","      <td>0.0</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>1.000000</td>\n","      <td>2.000000</td>\n","      <td>2.000000</td>\n","      <td>4.000000</td>\n","      <td>54.0</td>\n","    </tr>\n","    <tr>\n","      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n","      <td>149391.0</td>\n","      <td>0.212503</td>\n","      <td>3.810523</td>\n","      <td>0.0</td>\n","      <td>0.0</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>2.000000</td>\n","      <td>98.0</td>\n","    </tr>\n","    <tr>\n","      <th>NumberOfDependents</th>\n","      <td>149391.0</td>\n","      <td>0.740393</td>\n","      <td>1.108272</td>\n","      <td>0.0</td>\n","      <td>0.0</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>1.000000</td>\n","      <td>2.000000</td>\n","      <td>4.000000</td>\n","      <td>20.0</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["                                         count         mean           std  \\\n","SeriousDlqin2yrs                      149391.0     0.066999      0.250021   \n","RevolvingUtilizationOfUnsecuredLines  149391.0     6.071087    250.263672   \n","age                                   149391.0    52.306237     14.725962   \n","NumberOfTime30-59DaysPastDueNotWorse  149391.0     0.393886      3.852953   \n","DebtRatio                             149391.0   354.436740   2041.843455   \n","MonthlyIncome                         149391.0  5424.665952  13236.156261   \n","NumberOfOpenCreditLinesAndLoans       149391.0     8.480892      5.136515   \n","NumberOfTimes90DaysLate               149391.0     0.238120      3.826165   \n","NumberRealEstateLoansOrLines          149391.0     1.022391      1.130196   \n","NumberOfTime60-89DaysPastDueNotWorse  149391.0     0.212503      3.810523   \n","NumberOfDependents                    149391.0     0.740393      1.108272   \n","\n","                                      min    1%        10%          25%  \\\n","SeriousDlqin2yrs                      0.0   0.0   0.000000     0.000000   \n","RevolvingUtilizationOfUnsecuredLines  0.0   0.0   0.003199     0.030132   \n","age                                   0.0  24.0  33.000000    41.000000   \n","NumberOfTime30-59DaysPastDueNotWorse  0.0   0.0   0.000000     0.000000   \n","DebtRatio                             0.0   0.0   0.034991     0.177441   \n","MonthlyIncome                         0.0   0.0   0.170000  1800.000000   \n","NumberOfOpenCreditLinesAndLoans       0.0   0.0   3.000000     5.000000   \n","NumberOfTimes90DaysLate               0.0   0.0   0.000000     0.000000   \n","NumberRealEstateLoansOrLines          0.0   0.0   0.000000     0.000000   \n","NumberOfTime60-89DaysPastDueNotWorse  0.0   0.0   0.000000     0.000000   \n","NumberOfDependents                    0.0   0.0   0.000000     0.000000   \n","\n","                                              50%          75%           90%  \\\n","SeriousDlqin2yrs                         0.000000     0.000000      0.000000   \n","RevolvingUtilizationOfUnsecuredLines     0.154235     0.556494      0.978007   \n","age                                     52.000000    63.000000     72.000000   \n","NumberOfTime30-59DaysPastDueNotWorse     0.000000     0.000000      1.000000   \n","DebtRatio                                0.368234     0.875279   1275.000000   \n","MonthlyIncome                         4420.000000  7416.000000  10800.000000   \n","NumberOfOpenCreditLinesAndLoans          8.000000    11.000000     15.000000   \n","NumberOfTimes90DaysLate                  0.000000     0.000000      0.000000   \n","NumberRealEstateLoansOrLines             1.000000     2.000000      2.000000   \n","NumberOfTime60-89DaysPastDueNotWorse     0.000000     0.000000      0.000000   \n","NumberOfDependents                       0.000000     1.000000      2.000000   \n","\n","                                               99%        max  \n","SeriousDlqin2yrs                          1.000000        1.0  \n","RevolvingUtilizationOfUnsecuredLines      1.093922    50708.0  \n","age                                      87.000000      109.0  \n","NumberOfTime30-59DaysPastDueNotWorse      4.000000       98.0  \n","DebtRatio                              4985.100000   329664.0  \n","MonthlyIncome                         23256.100000  3008750.0  \n","NumberOfOpenCreditLinesAndLoans          24.000000       58.0  \n","NumberOfTimes90DaysLate                   3.000000       98.0  \n","NumberRealEstateLoansOrLines              4.000000       54.0  \n","NumberOfTime60-89DaysPastDueNotWorse      2.000000       98.0  \n","NumberOfDependents                        4.000000       20.0  "]},"metadata":{"tags":[]},"execution_count":136}]},{"metadata":{"id":"q0LRa5-bK3de","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"a64370f6-bbde-4860-8551-1982c29ee9d4","executionInfo":{"status":"ok","timestamp":1546352177453,"user_tz":-480,"elapsed":920,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#异常值也被我们观察到，年龄的最小值居然有0，这不符合银行的业务需求，即便是儿童账户也要至少8岁，我们可以\n","#查看一下年龄为0的人有多少\n","(data[\"age\"] == 0).sum()"],"execution_count":137,"outputs":[{"output_type":"execute_result","data":{"text/plain":["1"]},"metadata":{"tags":[]},"execution_count":137}]},{"metadata":{"id":"OSELp9fqK4At","colab_type":"code","colab":{}},"cell_type":"code","source":["#发现只有一个人年龄为0，可以判断这肯定是录入失误造成的，可以当成是缺失值来处理，直接删除掉这个样本\n","data = data[data[\"age\"] != 0]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"3ciExTj1P-Po","colab_type":"code","colab":{}},"cell_type":"code","source":["\"\"\"\n","另外，有三个指标看起来很奇怪：\n","\"NumberOfTime30-59DaysPastDueNotWorse\"\n","\"NumberOfTime60-89DaysPastDueNotWorse\"\n","\"NumberOfTimes90DaysLate\"\n","这三个指标分别是“过去两年内出现35-59天逾期但是没有发展的更坏的次数”，“过去两年内出现60-89天逾期但是没\n","有发展的更坏的次数”,“过去两年内出现90天逾期的次数”。这三个指标，在99%的分布的时候依然是2，最大值却是\n","98，看起来非常奇怪。一个人在过去两年内逾期35~59天98次，一年6个60天，两年内逾期98次这是怎么算出来的？\n","我们可以去咨询业务人员，请教他们这个逾期次数是如何计算的。如果这个指标是正常的，那这些两年内逾期了98次的\n","客户，应该都是坏客户。在我们无法询问他们情况下，我们查看一下有多少个样本存在这种异常：\n","\"\"\""],"execution_count":0,"outputs":[]},{"metadata":{"id":"2JGrFwg0RRSy","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":2006},"outputId":"68c8abf6-7eda-40a5-ea71-7b07b99722c0","executionInfo":{"status":"ok","timestamp":1546352182984,"user_tz":-480,"elapsed":809,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["data[data.loc[:,\"NumberOfTimes90DaysLate\"] > 90]"],"execution_count":139,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>SeriousDlqin2yrs</th>\n","      <th>RevolvingUtilizationOfUnsecuredLines</th>\n","      <th>age</th>\n","      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n","      <th>DebtRatio</th>\n","      <th>MonthlyIncome</th>\n","      <th>NumberOfOpenCreditLinesAndLoans</th>\n","      <th>NumberOfTimes90DaysLate</th>\n","      <th>NumberRealEstateLoansOrLines</th>\n","      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n","      <th>NumberOfDependents</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>1732</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>27</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2700.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>2285</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>22</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1291.750349</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>3883</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>38</td>\n","      <td>98</td>\n","      <td>12.000000</td>\n","      <td>2562.720000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>4416</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>21</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>0.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>4704</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>21</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2000.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>5072</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>33</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1500.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>6279</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>51</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>7500.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>7031</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>29</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1647.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>7116</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>25</td>\n","      <td>98</td>\n","      <td>21.000000</td>\n","      <td>4593.690000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>7686</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>21</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2107.137522</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>8170</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>23</td>\n","      <td>98</td>\n","      <td>0.006922</td>\n","      <td>2166.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>9274</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>24</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1488.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>9644</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>53</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1900.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>9681</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>28</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1400.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>10197</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>23</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>10241</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>28</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1700.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>11156</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>26</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1417.108333</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>11357</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>27</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>3737.967500</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>12016</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>28</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2171.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>12126</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>50</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1350.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>12364</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>25</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>640.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>13196</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>40</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>7218.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>2.0</td>\n","    </tr>\n","    <tr>\n","      <th>14781</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>23</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1698.365655</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>14892</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>56</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2561.390000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>16652</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>54</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2111.283333</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>17968</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>35</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1700.000000</td>\n","      <td>1</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>1.0</td>\n","    </tr>\n","    <tr>\n","      <th>18470</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>26</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2305.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>18513</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>21</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1163.165636</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>18691</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>21</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1163.165636</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>18704</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>46</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1879.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>1.0</td>\n","    </tr>\n","    <tr>\n","      <th>...</th>\n","      <td>...</td>\n","      <td>...</td>\n","      <td>...</td>\n","      <td>...</td>\n","      <td>...</td>\n","      <td>...</td>\n","      <td>...</td>\n","      <td>...</td>\n","      <td>...</td>\n","      <td>...</td>\n","      <td>...</td>\n","    </tr>\n","    <tr>\n","      <th>127123</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>25</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>3360.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>127724</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>54</td>\n","      <td>98</td>\n","      <td>0.012994</td>\n","      <td>2000.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>128149</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>54</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2111.283333</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>129213</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>30</td>\n","      <td>98</td>\n","      <td>0.024979</td>\n","      <td>1200.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>129382</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>29</td>\n","      <td>98</td>\n","      <td>36.000000</td>\n","      <td>6661.080000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>129928</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>52</td>\n","      <td>98</td>\n","      <td>89.000000</td>\n","      <td>396.510000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>131400</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>39</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>3437.787333</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>132525</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>39</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2541.640000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>1.0</td>\n","    </tr>\n","    <tr>\n","      <th>133734</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>21</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>867.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>134082</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>33</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>4100.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>1.0</td>\n","    </tr>\n","    <tr>\n","      <th>136023</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>54</td>\n","      <td>98</td>\n","      <td>0.059411</td>\n","      <td>1800.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>136160</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>34</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>3144.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>2.0</td>\n","    </tr>\n","    <tr>\n","      <th>136190</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>33</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2600.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>4.0</td>\n","    </tr>\n","    <tr>\n","      <th>137539</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>40</td>\n","      <td>98</td>\n","      <td>49.000000</td>\n","      <td>356.110000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>138663</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>33</td>\n","      <td>98</td>\n","      <td>0.008055</td>\n","      <td>3475.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>2.0</td>\n","    </tr>\n","    <tr>\n","      <th>140520</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>24</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>750.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>140847</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>22</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>4500.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>140959</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>27</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>7840.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>141333</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>40</td>\n","      <td>98</td>\n","      <td>0.010939</td>\n","      <td>3290.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>3.0</td>\n","    </tr>\n","    <tr>\n","      <th>141571</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>23</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>3553.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>143147</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>33</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2534.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>143654</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>31</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2200.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>3.0</td>\n","    </tr>\n","    <tr>\n","      <th>144010</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>60</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1375.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>145669</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>28</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>1664.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>146538</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>37</td>\n","      <td>98</td>\n","      <td>0.007578</td>\n","      <td>3166.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>146667</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>25</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2022.348905</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>147180</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>68</td>\n","      <td>98</td>\n","      <td>255.000000</td>\n","      <td>127.210000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>148548</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>24</td>\n","      <td>98</td>\n","      <td>54.000000</td>\n","      <td>315.130000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>148634</th>\n","      <td>0</td>\n","      <td>1.0</td>\n","      <td>26</td>\n","      <td>98</td>\n","      <td>0.000000</td>\n","      <td>2000.000000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","    <tr>\n","      <th>148833</th>\n","      <td>1</td>\n","      <td>1.0</td>\n","      <td>34</td>\n","      <td>98</td>\n","      <td>9.000000</td>\n","      <td>2523.890000</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0</td>\n","      <td>98</td>\n","      <td>0.0</td>\n","    </tr>\n","  </tbody>\n","</table>\n","<p>225 rows × 11 columns</p>\n","</div>"],"text/plain":["        SeriousDlqin2yrs  RevolvingUtilizationOfUnsecuredLines  age  \\\n","1732                   1                                   1.0   27   \n","2285                   0                                   1.0   22   \n","3883                   0                                   1.0   38   \n","4416                   0                                   1.0   21   \n","4704                   0                                   1.0   21   \n","5072                   0                                   1.0   33   \n","6279                   1                                   1.0   51   \n","7031                   1                                   1.0   29   \n","7116                   1                                   1.0   25   \n","7686                   1                                   1.0   21   \n","8170                   1                                   1.0   23   \n","9274                   0                                   1.0   24   \n","9644                   1                                   1.0   53   \n","9681                   0                                   1.0   28   \n","10197                  0                                   1.0   23   \n","10241                  1                                   1.0   28   \n","11156                  1                                   1.0   26   \n","11357                  1                                   1.0   27   \n","12016                  0                                   1.0   28   \n","12126                  1                                   1.0   50   \n","12364                  1                                   1.0   25   \n","13196                  0                                   1.0   40   \n","14781                  1                                   1.0   23   \n","14892                  1                                   1.0   56   \n","16652                  1                                   1.0   54   \n","17968                  0                                   1.0   35   \n","18470                  0                                   1.0   26   \n","18513                  0                                   1.0   21   \n","18691                  0                                   1.0   21   \n","18704                  0                                   1.0   46   \n","...                  ...                                   ...  ...   \n","127123                 1                                   1.0   25   \n","127724                 1                                   1.0   54   \n","128149                 1                                   1.0   54   \n","129213                 1                                   1.0   30   \n","129382                 1                                   1.0   29   \n","129928                 1                                   1.0   52   \n","131400                 0                                   1.0   39   \n","132525                 0                                   1.0   39   \n","133734                 0                                   1.0   21   \n","134082                 1                                   1.0   33   \n","136023                 1                                   1.0   54   \n","136160                 1                                   1.0   34   \n","136190                 1                                   1.0   33   \n","137539                 1                                   1.0   40   \n","138663                 0                                   1.0   33   \n","140520                 0                                   1.0   24   \n","140847                 0                                   1.0   22   \n","140959                 1                                   1.0   27   \n","141333                 1                                   1.0   40   \n","141571                 0                                   1.0   23   \n","143147                 0                                   1.0   33   \n","143654                 1                                   1.0   31   \n","144010                 1                                   1.0   60   \n","145669                 1                                   1.0   28   \n","146538                 1                                   1.0   37   \n","146667                 1                                   1.0   25   \n","147180                 1                                   1.0   68   \n","148548                 1                                   1.0   24   \n","148634                 0                                   1.0   26   \n","148833                 1                                   1.0   34   \n","\n","        NumberOfTime30-59DaysPastDueNotWorse   DebtRatio  MonthlyIncome  \\\n","1732                                      98    0.000000    2700.000000   \n","2285                                      98    0.000000    1291.750349   \n","3883                                      98   12.000000    2562.720000   \n","4416                                      98    0.000000       0.000000   \n","4704                                      98    0.000000    2000.000000   \n","5072                                      98    0.000000    1500.000000   \n","6279                                      98    0.000000    7500.000000   \n","7031                                      98    0.000000    1647.000000   \n","7116                                      98   21.000000    4593.690000   \n","7686                                      98    0.000000    2107.137522   \n","8170                                      98    0.006922    2166.000000   \n","9274                                      98    0.000000    1488.000000   \n","9644                                      98    0.000000    1900.000000   \n","9681                                      98    0.000000    1400.000000   \n","10197                                     98    0.000000       1.000000   \n","10241                                     98    0.000000    1700.000000   \n","11156                                     98    0.000000    1417.108333   \n","11357                                     98    0.000000    3737.967500   \n","12016                                     98    0.000000    2171.000000   \n","12126                                     98    0.000000    1350.000000   \n","12364                                     98    0.000000     640.000000   \n","13196                                     98    0.000000    7218.000000   \n","14781                                     98    0.000000    1698.365655   \n","14892                                     98    0.000000    2561.390000   \n","16652                                     98    0.000000    2111.283333   \n","17968                                     98    0.000000    1700.000000   \n","18470                                     98    0.000000    2305.000000   \n","18513                                     98    0.000000    1163.165636   \n","18691                                     98    0.000000    1163.165636   \n","18704                                     98    0.000000    1879.000000   \n","...                                      ...         ...            ...   \n","127123                                    98    0.000000    3360.000000   \n","127724                                    98    0.012994    2000.000000   \n","128149                                    98    0.000000    2111.283333   \n","129213                                    98    0.024979    1200.000000   \n","129382                                    98   36.000000    6661.080000   \n","129928                                    98   89.000000     396.510000   \n","131400                                    98    0.000000    3437.787333   \n","132525                                    98    0.000000    2541.640000   \n","133734                                    98    0.000000     867.000000   \n","134082                                    98    0.000000    4100.000000   \n","136023                                    98    0.059411    1800.000000   \n","136160                                    98    0.000000    3144.000000   \n","136190                                    98    0.000000    2600.000000   \n","137539                                    98   49.000000     356.110000   \n","138663                                    98    0.008055    3475.000000   \n","140520                                    98    0.000000     750.000000   \n","140847                                    98    0.000000    4500.000000   \n","140959                                    98    0.000000    7840.000000   \n","141333                                    98    0.010939    3290.000000   \n","141571                                    98    0.000000    3553.000000   \n","143147                                    98    0.000000    2534.000000   \n","143654                                    98    0.000000    2200.000000   \n","144010                                    98    0.000000    1375.000000   \n","145669                                    98    0.000000    1664.000000   \n","146538                                    98    0.007578    3166.000000   \n","146667                                    98    0.000000    2022.348905   \n","147180                                    98  255.000000     127.210000   \n","148548                                    98   54.000000     315.130000   \n","148634                                    98    0.000000    2000.000000   \n","148833                                    98    9.000000    2523.890000   \n","\n","        NumberOfOpenCreditLinesAndLoans  NumberOfTimes90DaysLate  \\\n","1732                                  0                       98   \n","2285                                  0                       98   \n","3883                                  0                       98   \n","4416                                  0                       98   \n","4704                                  0                       98   \n","5072                                  0                       98   \n","6279                                  0                       98   \n","7031                                  0                       98   \n","7116                                  0                       98   \n","7686                                  0                       98   \n","8170                                  0                       98   \n","9274                                  0                       98   \n","9644                                  0                       98   \n","9681                                  0                       98   \n","10197                                 0                       98   \n","10241                                 0                       98   \n","11156                                 0                       98   \n","11357                                 0                       98   \n","12016                                 0                       98   \n","12126                                 0                       98   \n","12364                                 0                       98   \n","13196                                 0                       98   \n","14781                                 0                       98   \n","14892                                 0                       98   \n","16652                                 0                       98   \n","17968                                 1                       98   \n","18470                                 0                       98   \n","18513                                 0                       98   \n","18691                                 0                       98   \n","18704                                 0                       98   \n","...                                 ...                      ...   \n","127123                                0                       98   \n","127724                                0                       98   \n","128149                                0                       98   \n","129213                                0                       98   \n","129382                                0                       98   \n","129928                                0                       98   \n","131400                                0                       98   \n","132525                                0                       98   \n","133734                                0                       98   \n","134082                                0                       98   \n","136023                                0                       98   \n","136160                                0                       98   \n","136190                                0                       98   \n","137539                                0                       98   \n","138663                                0                       98   \n","140520                                0                       98   \n","140847                                0                       98   \n","140959                                0                       98   \n","141333                                0                       98   \n","141571                                0                       98   \n","143147                                0                       98   \n","143654                                0                       98   \n","144010                                0                       98   \n","145669                                0                       98   \n","146538                                0                       98   \n","146667                                0                       98   \n","147180                                0                       98   \n","148548                                0                       98   \n","148634                                0                       98   \n","148833                                0                       98   \n","\n","        NumberRealEstateLoansOrLines  NumberOfTime60-89DaysPastDueNotWorse  \\\n","1732                               0                                    98   \n","2285                               0                                    98   \n","3883                               0                                    98   \n","4416                               0                                    98   \n","4704                               0                                    98   \n","5072                               0                                    98   \n","6279                               0                                    98   \n","7031                               0                                    98   \n","7116                               0                                    98   \n","7686                               0                                    98   \n","8170                               0                                    98   \n","9274                               0                                    98   \n","9644                               0                                    98   \n","9681                               0                                    98   \n","10197                              0                                    98   \n","10241                              0                                    98   \n","11156                              0                                    98   \n","11357                              0                                    98   \n","12016                              0                                    98   \n","12126                              0                                    98   \n","12364                              0                                    98   \n","13196                              0                                    98   \n","14781                              0                                    98   \n","14892                              0                                    98   \n","16652                              0                                    98   \n","17968                              0                                    98   \n","18470                              0                                    98   \n","18513                              0                                    98   \n","18691                              0                                    98   \n","18704                              0                                    98   \n","...                              ...                                   ...   \n","127123                             0                                    98   \n","127724                             0                                    98   \n","128149                             0                                    98   \n","129213                             0                                    98   \n","129382                             0                                    98   \n","129928                             0                                    98   \n","131400                             0                                    98   \n","132525                             0                                    98   \n","133734                             0                                    98   \n","134082                             0                                    98   \n","136023                             0                                    98   \n","136160                             0                                    98   \n","136190                             0                                    98   \n","137539                             0                                    98   \n","138663                             0                                    98   \n","140520                             0                                    98   \n","140847                             0                                    98   \n","140959                             0                                    98   \n","141333                             0                                    98   \n","141571                             0                                    98   \n","143147                             0                                    98   \n","143654                             0                                    98   \n","144010                             0                                    98   \n","145669                             0                                    98   \n","146538                             0                                    98   \n","146667                             0                                    98   \n","147180                             0                                    98   \n","148548                             0                                    98   \n","148634                             0                                    98   \n","148833                             0                                    98   \n","\n","        NumberOfDependents  \n","1732                   0.0  \n","2285                   0.0  \n","3883                   0.0  \n","4416                   0.0  \n","4704                   0.0  \n","5072                   0.0  \n","6279                   0.0  \n","7031                   0.0  \n","7116                   0.0  \n","7686                   0.0  \n","8170                   0.0  \n","9274                   0.0  \n","9644                   0.0  \n","9681                   0.0  \n","10197                  0.0  \n","10241                  0.0  \n","11156                  0.0  \n","11357                  0.0  \n","12016                  0.0  \n","12126                  0.0  \n","12364                  0.0  \n","13196                  2.0  \n","14781                  0.0  \n","14892                  0.0  \n","16652                  0.0  \n","17968                  1.0  \n","18470                  0.0  \n","18513                  0.0  \n","18691                  0.0  \n","18704                  1.0  \n","...                    ...  \n","127123                 0.0  \n","127724                 0.0  \n","128149                 0.0  \n","129213                 0.0  \n","129382                 0.0  \n","129928                 0.0  \n","131400                 0.0  \n","132525                 1.0  \n","133734                 0.0  \n","134082                 1.0  \n","136023                 0.0  \n","136160                 2.0  \n","136190                 4.0  \n","137539                 0.0  \n","138663                 2.0  \n","140520                 0.0  \n","140847                 0.0  \n","140959                 0.0  \n","141333                 3.0  \n","141571                 0.0  \n","143147                 0.0  \n","143654                 3.0  \n","144010                 0.0  \n","145669                 0.0  \n","146538                 0.0  \n","146667                 0.0  \n","147180                 0.0  \n","148548                 0.0  \n","148634                 0.0  \n","148833                 0.0  \n","\n","[225 rows x 11 columns]"]},"metadata":{"tags":[]},"execution_count":139}]},{"metadata":{"id":"LRfN2CemRWue","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":357},"outputId":"e398a4bf-d86a-4b44-b8da-c9d911b28fa7","executionInfo":{"status":"ok","timestamp":1546352187720,"user_tz":-480,"elapsed":1204,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["data.loc[:,\"NumberOfTimes90DaysLate\"].value_counts()"],"execution_count":140,"outputs":[{"output_type":"execute_result","data":{"text/plain":["0     141107\n","1       5232\n","2       1555\n","3        667\n","4        291\n","98       220\n","5        131\n","6         80\n","7         38\n","8         21\n","9         19\n","10         8\n","11         5\n","96         5\n","13         4\n","12         2\n","14         2\n","15         2\n","17         1\n","Name: NumberOfTimes90DaysLate, dtype: int64"]},"metadata":{"tags":[]},"execution_count":140}]},{"metadata":{"id":"5DLiHEqtK4Pt","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":221},"outputId":"ac22408c-9911-4896-cfa7-ad5201e74640","executionInfo":{"status":"ok","timestamp":1546352190695,"user_tz":-480,"elapsed":819,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["data[data.loc[:,\"NumberOfTimes90DaysLate\"] > 90].count()\n","#有225个样本存在这样的情况，并且这些样本，我们观察一下，标签并不都是1，他们并不都是坏客户。因此，我们基\n","#本可以判断，这些样本是某种异常，应该把它们删除"],"execution_count":141,"outputs":[{"output_type":"execute_result","data":{"text/plain":["SeriousDlqin2yrs                        225\n","RevolvingUtilizationOfUnsecuredLines    225\n","age                                     225\n","NumberOfTime30-59DaysPastDueNotWorse    225\n","DebtRatio                               225\n","MonthlyIncome                           225\n","NumberOfOpenCreditLinesAndLoans         225\n","NumberOfTimes90DaysLate                 225\n","NumberRealEstateLoansOrLines            225\n","NumberOfTime60-89DaysPastDueNotWorse    225\n","NumberOfDependents                      225\n","dtype: int64"]},"metadata":{"tags":[]},"execution_count":141}]},{"metadata":{"id":"7QxcZke5K5Kg","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":289},"outputId":"d2f00c0f-20af-4c87-beb6-43dc94011e6e","executionInfo":{"status":"ok","timestamp":1546352194585,"user_tz":-480,"elapsed":952,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["data = data[data.loc[:,\"NumberOfTimes90DaysLate\"] < 90]\n","#恢复索引\n","data.index = range(data.shape[0])\n","data.info()"],"execution_count":142,"outputs":[{"output_type":"stream","text":["<class 'pandas.core.frame.DataFrame'>\n","RangeIndex: 149165 entries, 0 to 149164\n","Data columns (total 11 columns):\n","SeriousDlqin2yrs                        149165 non-null int64\n","RevolvingUtilizationOfUnsecuredLines    149165 non-null float64\n","age                                     149165 non-null int64\n","NumberOfTime30-59DaysPastDueNotWorse    149165 non-null int64\n","DebtRatio                               149165 non-null float64\n","MonthlyIncome                           149165 non-null float64\n","NumberOfOpenCreditLinesAndLoans         149165 non-null int64\n","NumberOfTimes90DaysLate                 149165 non-null int64\n","NumberRealEstateLoansOrLines            149165 non-null int64\n","NumberOfTime60-89DaysPastDueNotWorse    149165 non-null int64\n","NumberOfDependents                      149165 non-null float64\n","dtypes: float64(4), int64(7)\n","memory usage: 12.5 MB\n"],"name":"stdout"}]},{"metadata":{"id":"bLy5nSGQLf0p","colab_type":"text"},"cell_type":"markdown","source":["# 样本不均衡问题"]},{"metadata":{"id":"_etjzRzMK5HB","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":68},"outputId":"a3d897a8-7eca-43ec-896f-0f1c338e2ed7","executionInfo":{"status":"ok","timestamp":1546352200381,"user_tz":-480,"elapsed":1432,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#探索标签的分布\n","X = data.iloc[:,1:]\n","y = data.iloc[:,0]\n","y.value_counts()"],"execution_count":143,"outputs":[{"output_type":"execute_result","data":{"text/plain":["0    139292\n","1      9873\n","Name: SeriousDlqin2yrs, dtype: int64"]},"metadata":{"tags":[]},"execution_count":143}]},{"metadata":{"id":"GbjdsfGJLmXw","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"96a98347-9912-4dde-8043-0c7542becea1","executionInfo":{"status":"ok","timestamp":1546352204413,"user_tz":-480,"elapsed":1624,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["n_sample = X.shape[0]\n","n_1_sample = y.value_counts()[1]\n","n_0_sample = y.value_counts()[0]\n","print('样本个数：{}; 1占{:.2%}; 0占{:.2%}'.format(n_sample,n_1_sample/n_sample,n_0_sample/n_sample))"],"execution_count":144,"outputs":[{"output_type":"stream","text":["样本个数：149165; 1占6.62%; 0占93.38%\n"],"name":"stdout"}]},{"metadata":{"id":"zAgz1fyEK5EM","colab_type":"code","colab":{}},"cell_type":"code","source":["import imblearn\n","#imblearn是专门用来处理不平衡数据集的库，在处理样本不均衡问题中性能高过sklearn很多\n","#imblearn里面也是一个个的类，也需要进行实例化，fit拟合，和sklearn用法相似\n","from imblearn.over_sampling import SMOTE"],"execution_count":0,"outputs":[]},{"metadata":{"id":"s56Kn_PCLz0C","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":68},"outputId":"c45964f2-eca9-4059-ffb2-0f3121015775","executionInfo":{"status":"ok","timestamp":1546352209934,"user_tz":-480,"elapsed":1853,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["sm = SMOTE(random_state=42) #实例化\n","X,y = sm.fit_sample(X,y)\n","# 返回上采样后的特征矩阵和标签\n","n_sample_ = X.shape[0]\n","pd.Series(y).value_counts()"],"execution_count":146,"outputs":[{"output_type":"execute_result","data":{"text/plain":["1    139292\n","0    139292\n","dtype: int64"]},"metadata":{"tags":[]},"execution_count":146}]},{"metadata":{"id":"MaOtHAnNL4C9","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"6f5b3bf7-22de-46d7-a15d-f7386200d743","executionInfo":{"status":"ok","timestamp":1546352212839,"user_tz":-480,"elapsed":866,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["n_1_sample = pd.Series(y).value_counts()[1]\n","n_0_sample = pd.Series(y).value_counts()[0]\n","print('样本个数：{}; 1占{:.2%}; 0占{:.2%}'.format(n_sample_,n_1_sample/n_sample_,n_0_sample/n_sample_))"],"execution_count":147,"outputs":[{"output_type":"stream","text":["样本个数：278584; 1占50.00%; 0占50.00%\n"],"name":"stdout"}]},{"metadata":{"id":"wa_odRg-MA45","colab_type":"text"},"cell_type":"markdown","source":["# 分训练集和测试集"]},{"metadata":{"id":"6TmhoTDcK5At","colab_type":"code","colab":{}},"cell_type":"code","source":["from sklearn.model_selection import train_test_split\n","X = pd.DataFrame(X)\n","y = pd.DataFrame(y)\n","\n","X_train, X_vali, Y_train, Y_vali = train_test_split(X,y,test_size=0.3,random_state=420)\n","\n","model_data = pd.concat([Y_train, X_train], axis=1)\n","model_data.index = range(model_data.shape[0])\n","\n","model_data.columns = data.columns\n","vali_data = pd.concat([Y_vali, X_vali], axis=1)\n","vali_data.index = range(vali_data.shape[0])\n","vali_data.columns = data.columns"],"execution_count":0,"outputs":[]},{"metadata":{"id":"6Bx1ZLDHK49s","colab_type":"code","colab":{}},"cell_type":"code","source":["model_data.to_csv(r\"model_data.csv\")\n","vali_data.to_csv(r\"vali_data.csv\")"],"execution_count":0,"outputs":[]},{"metadata":{"id":"BfpV0inNMUIm","colab_type":"text"},"cell_type":"markdown","source":["# 分箱"]},{"metadata":{"id":"eOW6WFlvMZKg","colab_type":"text"},"cell_type":"markdown","source":["## 1 等频分箱"]},{"metadata":{"id":"LtlOWOFfK47C","colab_type":"code","colab":{}},"cell_type":"code","source":["#按照等频对需要分箱的列进行分箱\n","model_data[\"qcut\"], updown = pd.qcut(model_data[\"age\"], retbins=True, q=20)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"ovj7omq2WJHB","colab_type":"code","colab":{}},"cell_type":"code","source":["\n","\"\"\"\n","pd.qcut，基于分位数的分箱函数，本质是将连续型变量离散化\n","只能够处理一维数据。返回箱子的上限和下限\n","参数q：要分箱的个数\n","参数retbins=True来要求同时返回结构为索引为样本索引，元素为分到的箱子的Series\n","现在返回两个值：每个样本属于哪个箱子，以及所有箱子的上限和下限\n","\"\"\""],"execution_count":0,"outputs":[]},{"metadata":{"id":"Wshy_hyGK43n","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1122},"outputId":"c59026c2-56fb-4cc7-c578-c3ed1393efb5","executionInfo":{"status":"ok","timestamp":1546352250341,"user_tz":-480,"elapsed":991,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#在这里让model_data新添加一列叫做“qcut分箱”，这一列其实就是每个样本所对应的箱子\n","model_data[\"qcut\"]"],"execution_count":151,"outputs":[{"output_type":"execute_result","data":{"text/plain":["0             (52.0, 54.0]\n","1             (61.0, 64.0]\n","2             (39.0, 41.0]\n","3             (68.0, 74.0]\n","4             (52.0, 54.0]\n","5             (41.0, 43.0]\n","6            (36.68, 39.0]\n","7           (20.999, 28.0]\n","8           (28.0, 31.047]\n","9           (31.047, 34.0]\n","10            (61.0, 64.0]\n","11          (31.047, 34.0]\n","12            (50.0, 52.0]\n","13           (74.0, 107.0]\n","14          (31.047, 34.0]\n","15            (54.0, 56.0]\n","16           (36.68, 39.0]\n","17            (61.0, 64.0]\n","18            (52.0, 54.0]\n","19            (39.0, 41.0]\n","20          (20.999, 28.0]\n","21            (52.0, 54.0]\n","22           (74.0, 107.0]\n","23          (45.0, 46.975]\n","24            (50.0, 52.0]\n","25            (61.0, 64.0]\n","26            (61.0, 64.0]\n","27           (34.0, 36.68]\n","28            (61.0, 64.0]\n","29          (28.0, 31.047]\n","                ...       \n","194978        (41.0, 43.0]\n","194979        (61.0, 64.0]\n","194980      (45.0, 46.975]\n","194981        (43.0, 45.0]\n","194982       (34.0, 36.68]\n","194983        (50.0, 52.0]\n","194984    (46.975, 48.484]\n","194985      (20.999, 28.0]\n","194986        (50.0, 52.0]\n","194987      (28.0, 31.047]\n","194988        (61.0, 64.0]\n","194989      (58.662, 61.0]\n","194990        (50.0, 52.0]\n","194991        (52.0, 54.0]\n","194992      (28.0, 31.047]\n","194993      (31.047, 34.0]\n","194994        (61.0, 64.0]\n","194995      (48.484, 50.0]\n","194996    (46.975, 48.484]\n","194997       (74.0, 107.0]\n","194998      (28.0, 31.047]\n","194999       (74.0, 107.0]\n","195000    (46.975, 48.484]\n","195001        (39.0, 41.0]\n","195002       (74.0, 107.0]\n","195003      (31.047, 34.0]\n","195004      (48.484, 50.0]\n","195005      (45.0, 46.975]\n","195006        (61.0, 64.0]\n","195007        (52.0, 54.0]\n","Name: qcut, Length: 195008, dtype: category\n","Categories (20, interval[float64]): [(20.999, 28.0] < (28.0, 31.047] < (31.047, 34.0] < (34.0, 36.68] <\n","                                     ... < (61.0, 64.0] < (64.0, 68.0] < (68.0, 74.0] <\n","                                     (74.0, 107.0]]"]},"metadata":{"tags":[]},"execution_count":151}]},{"metadata":{"id":"rbeAR-JLbe2Q","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":374},"outputId":"8b2796fc-7bf5-4b5a-9018-8bb4ede288ec","executionInfo":{"status":"ok","timestamp":1546352256531,"user_tz":-480,"elapsed":2023,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["model_data[\"qcut\"].value_counts()"],"execution_count":152,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(36.68, 39.0]       10981\n","(50.0, 52.0]        10752\n","(61.0, 64.0]        10726\n","(31.047, 34.0]      10673\n","(58.662, 61.0]      10588\n","(20.999, 28.0]      10218\n","(43.0, 45.0]        10087\n","(52.0, 54.0]        10043\n","(41.0, 43.0]         9820\n","(48.484, 50.0]       9792\n","(46.975, 48.484]     9750\n","(39.0, 41.0]         9550\n","(74.0, 107.0]        9295\n","(28.0, 31.047]       9283\n","(64.0, 68.0]         9268\n","(54.0, 56.0]         9131\n","(56.0, 58.662]       9034\n","(68.0, 74.0]         8875\n","(34.0, 36.68]        8828\n","(45.0, 46.975]       8314\n","Name: qcut, dtype: int64"]},"metadata":{"tags":[]},"execution_count":152}]},{"metadata":{"id":"GQK2WsZDK404","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":119},"outputId":"c836252e-2e2b-4657-9aff-209e4b23dfa4","executionInfo":{"status":"ok","timestamp":1546352260590,"user_tz":-480,"elapsed":1307,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#所有箱子的上限和下限\n","updown"],"execution_count":153,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([ 21.        ,  28.        ,  31.04665844,  34.        ,\n","        36.67957525,  39.        ,  41.        ,  43.        ,\n","        45.        ,  46.97539708,  48.48418747,  50.        ,\n","        52.        ,  54.        ,  56.        ,  58.66193043,\n","        61.        ,  64.        ,  68.        ,  74.        ,\n","       107.        ])"]},"metadata":{"tags":[]},"execution_count":153}]},{"metadata":{"id":"dLqzaIeGcNem","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1077},"outputId":"e5853a2f-99c6-45c5-8cbb-96ed7c8ecd77","executionInfo":{"status":"ok","timestamp":1546352430095,"user_tz":-480,"elapsed":1462,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["model_data[model_data[\"SeriousDlqin2yrs\"] == 0].groupby(by=\"qcut\").count()"],"execution_count":154,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>SeriousDlqin2yrs</th>\n","      <th>RevolvingUtilizationOfUnsecuredLines</th>\n","      <th>age</th>\n","      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n","      <th>DebtRatio</th>\n","      <th>MonthlyIncome</th>\n","      <th>NumberOfOpenCreditLinesAndLoans</th>\n","      <th>NumberOfTimes90DaysLate</th>\n","      <th>NumberRealEstateLoansOrLines</th>\n","      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n","      <th>NumberOfDependents</th>\n","    </tr>\n","    <tr>\n","      <th>qcut</th>\n","      <th></th>\n","      <th></th>\n","      <th></th>\n","      <th></th>\n","      <th></th>\n","      <th></th>\n","      <th></th>\n","      <th></th>\n","      <th></th>\n","      <th></th>\n","      <th></th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>(20.999, 28.0]</th>\n","      <td>4243</td>\n","      <td>4243</td>\n","      <td>4243</td>\n","      <td>4243</td>\n","      <td>4243</td>\n","      <td>4243</td>\n","      <td>4243</td>\n","      <td>4243</td>\n","      <td>4243</td>\n","      <td>4243</td>\n","      <td>4243</td>\n","    </tr>\n","    <tr>\n","      <th>(28.0, 31.047]</th>\n","      <td>3571</td>\n","      <td>3571</td>\n","      <td>3571</td>\n","      <td>3571</td>\n","      <td>3571</td>\n","      <td>3571</td>\n","      <td>3571</td>\n","      <td>3571</td>\n","      <td>3571</td>\n","      <td>3571</td>\n","      <td>3571</td>\n","    </tr>\n","    <tr>\n","      <th>(31.047, 34.0]</th>\n","      <td>4075</td>\n","      <td>4075</td>\n","      <td>4075</td>\n","      <td>4075</td>\n","      <td>4075</td>\n","      <td>4075</td>\n","      <td>4075</td>\n","      <td>4075</td>\n","      <td>4075</td>\n","      <td>4075</td>\n","      <td>4075</td>\n","    </tr>\n","    <tr>\n","      <th>(34.0, 36.68]</th>\n","      <td>2908</td>\n","      <td>2908</td>\n","      <td>2908</td>\n","      <td>2908</td>\n","      <td>2908</td>\n","      <td>2908</td>\n","      <td>2908</td>\n","      <td>2908</td>\n","      <td>2908</td>\n","      <td>2908</td>\n","      <td>2908</td>\n","    </tr>\n","    <tr>\n","      <th>(36.68, 39.0]</th>\n","      <td>5182</td>\n","      <td>5182</td>\n","      <td>5182</td>\n","      <td>5182</td>\n","      <td>5182</td>\n","      <td>5182</td>\n","      <td>5182</td>\n","      <td>5182</td>\n","      <td>5182</td>\n","      <td>5182</td>\n","      <td>5182</td>\n","    </tr>\n","    <tr>\n","      <th>(39.0, 41.0]</th>\n","      <td>3956</td>\n","      <td>3956</td>\n","      <td>3956</td>\n","      <td>3956</td>\n","      <td>3956</td>\n","      <td>3956</td>\n","      <td>3956</td>\n","      <td>3956</td>\n","      <td>3956</td>\n","      <td>3956</td>\n","      <td>3956</td>\n","    </tr>\n","    <tr>\n","      <th>(41.0, 43.0]</th>\n","      <td>4002</td>\n","      <td>4002</td>\n","      <td>4002</td>\n","      <td>4002</td>\n","      <td>4002</td>\n","      <td>4002</td>\n","      <td>4002</td>\n","      <td>4002</td>\n","      <td>4002</td>\n","      <td>4002</td>\n","      <td>4002</td>\n","    </tr>\n","    <tr>\n","      <th>(43.0, 45.0]</th>\n","      <td>4389</td>\n","      <td>4389</td>\n","      <td>4389</td>\n","      <td>4389</td>\n","      <td>4389</td>\n","      <td>4389</td>\n","      <td>4389</td>\n","      <td>4389</td>\n","      <td>4389</td>\n","      <td>4389</td>\n","      <td>4389</td>\n","    </tr>\n","    <tr>\n","      <th>(45.0, 46.975]</th>\n","      <td>2419</td>\n","      <td>2419</td>\n","      <td>2419</td>\n","      <td>2419</td>\n","      <td>2419</td>\n","      <td>2419</td>\n","      <td>2419</td>\n","      <td>2419</td>\n","      <td>2419</td>\n","      <td>2419</td>\n","      <td>2419</td>\n","    </tr>\n","    <tr>\n","      <th>(46.975, 48.484]</th>\n","      <td>4813</td>\n","      <td>4813</td>\n","      <td>4813</td>\n","      <td>4813</td>\n","      <td>4813</td>\n","      <td>4813</td>\n","      <td>4813</td>\n","      <td>4813</td>\n","      <td>4813</td>\n","      <td>4813</td>\n","      <td>4813</td>\n","    </tr>\n","    <tr>\n","      <th>(48.484, 50.0]</th>\n","      <td>4900</td>\n","      <td>4900</td>\n","      <td>4900</td>\n","      <td>4900</td>\n","      <td>4900</td>\n","      <td>4900</td>\n","      <td>4900</td>\n","      <td>4900</td>\n","      <td>4900</td>\n","      <td>4900</td>\n","      <td>4900</td>\n","    </tr>\n","    <tr>\n","      <th>(50.0, 52.0]</th>\n","      <td>4728</td>\n","      <td>4728</td>\n","      <td>4728</td>\n","      <td>4728</td>\n","      <td>4728</td>\n","      <td>4728</td>\n","      <td>4728</td>\n","      <td>4728</td>\n","      <td>4728</td>\n","      <td>4728</td>\n","      <td>4728</td>\n","    </tr>\n","    <tr>\n","      <th>(52.0, 54.0]</th>\n","      <td>4681</td>\n","      <td>4681</td>\n","      <td>4681</td>\n","      <td>4681</td>\n","      <td>4681</td>\n","      <td>4681</td>\n","      <td>4681</td>\n","      <td>4681</td>\n","      <td>4681</td>\n","      <td>4681</td>\n","      <td>4681</td>\n","    </tr>\n","    <tr>\n","      <th>(54.0, 56.0]</th>\n","      <td>4677</td>\n","      <td>4677</td>\n","      <td>4677</td>\n","      <td>4677</td>\n","      <td>4677</td>\n","      <td>4677</td>\n","      <td>4677</td>\n","      <td>4677</td>\n","      <td>4677</td>\n","      <td>4677</td>\n","      <td>4677</td>\n","    </tr>\n","    <tr>\n","      <th>(56.0, 58.662]</th>\n","      <td>4483</td>\n","      <td>4483</td>\n","      <td>4483</td>\n","      <td>4483</td>\n","      <td>4483</td>\n","      <td>4483</td>\n","      <td>4483</td>\n","      <td>4483</td>\n","      <td>4483</td>\n","      <td>4483</td>\n","      <td>4483</td>\n","    </tr>\n","    <tr>\n","      <th>(58.662, 61.0]</th>\n","      <td>6583</td>\n","      <td>6583</td>\n","      <td>6583</td>\n","      <td>6583</td>\n","      <td>6583</td>\n","      <td>6583</td>\n","      <td>6583</td>\n","      <td>6583</td>\n","      <td>6583</td>\n","      <td>6583</td>\n","      <td>6583</td>\n","    </tr>\n","    <tr>\n","      <th>(61.0, 64.0]</th>\n","      <td>6968</td>\n","      <td>6968</td>\n","      <td>6968</td>\n","      <td>6968</td>\n","      <td>6968</td>\n","      <td>6968</td>\n","      <td>6968</td>\n","      <td>6968</td>\n","      <td>6968</td>\n","      <td>6968</td>\n","      <td>6968</td>\n","    </tr>\n","    <tr>\n","      <th>(64.0, 68.0]</th>\n","      <td>6623</td>\n","      <td>6623</td>\n","      <td>6623</td>\n","      <td>6623</td>\n","      <td>6623</td>\n","      <td>6623</td>\n","      <td>6623</td>\n","      <td>6623</td>\n","      <td>6623</td>\n","      <td>6623</td>\n","      <td>6623</td>\n","    </tr>\n","    <tr>\n","      <th>(68.0, 74.0]</th>\n","      <td>6753</td>\n","      <td>6753</td>\n","      <td>6753</td>\n","      <td>6753</td>\n","      <td>6753</td>\n","      <td>6753</td>\n","      <td>6753</td>\n","      <td>6753</td>\n","      <td>6753</td>\n","      <td>6753</td>\n","      <td>6753</td>\n","    </tr>\n","    <tr>\n","      <th>(74.0, 107.0]</th>\n","      <td>7737</td>\n","      <td>7737</td>\n","      <td>7737</td>\n","      <td>7737</td>\n","      <td>7737</td>\n","      <td>7737</td>\n","      <td>7737</td>\n","      <td>7737</td>\n","      <td>7737</td>\n","      <td>7737</td>\n","      <td>7737</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["                  SeriousDlqin2yrs  RevolvingUtilizationOfUnsecuredLines  \\\n","qcut                                                                       \n","(20.999, 28.0]                4243                                  4243   \n","(28.0, 31.047]                3571                                  3571   \n","(31.047, 34.0]                4075                                  4075   \n","(34.0, 36.68]                 2908                                  2908   \n","(36.68, 39.0]                 5182                                  5182   \n","(39.0, 41.0]                  3956                                  3956   \n","(41.0, 43.0]                  4002                                  4002   \n","(43.0, 45.0]                  4389                                  4389   \n","(45.0, 46.975]                2419                                  2419   \n","(46.975, 48.484]              4813                                  4813   \n","(48.484, 50.0]                4900                                  4900   \n","(50.0, 52.0]                  4728                                  4728   \n","(52.0, 54.0]                  4681                                  4681   \n","(54.0, 56.0]                  4677                                  4677   \n","(56.0, 58.662]                4483                                  4483   \n","(58.662, 61.0]                6583                                  6583   \n","(61.0, 64.0]                  6968                                  6968   \n","(64.0, 68.0]                  6623                                  6623   \n","(68.0, 74.0]                  6753                                  6753   \n","(74.0, 107.0]                 7737                                  7737   \n","\n","                   age  NumberOfTime30-59DaysPastDueNotWorse  DebtRatio  \\\n","qcut                                                                      \n","(20.999, 28.0]    4243                                  4243       4243   \n","(28.0, 31.047]    3571                                  3571       3571   \n","(31.047, 34.0]    4075                                  4075       4075   \n","(34.0, 36.68]     2908                                  2908       2908   \n","(36.68, 39.0]     5182                                  5182       5182   \n","(39.0, 41.0]      3956                                  3956       3956   \n","(41.0, 43.0]      4002                                  4002       4002   \n","(43.0, 45.0]      4389                                  4389       4389   \n","(45.0, 46.975]    2419                                  2419       2419   \n","(46.975, 48.484]  4813                                  4813       4813   \n","(48.484, 50.0]    4900                                  4900       4900   \n","(50.0, 52.0]      4728                                  4728       4728   \n","(52.0, 54.0]      4681                                  4681       4681   \n","(54.0, 56.0]      4677                                  4677       4677   \n","(56.0, 58.662]    4483                                  4483       4483   \n","(58.662, 61.0]    6583                                  6583       6583   \n","(61.0, 64.0]      6968                                  6968       6968   \n","(64.0, 68.0]      6623                                  6623       6623   \n","(68.0, 74.0]      6753                                  6753       6753   \n","(74.0, 107.0]     7737                                  7737       7737   \n","\n","                  MonthlyIncome  NumberOfOpenCreditLinesAndLoans  \\\n","qcut                                                               \n","(20.999, 28.0]             4243                             4243   \n","(28.0, 31.047]             3571                             3571   \n","(31.047, 34.0]             4075                             4075   \n","(34.0, 36.68]              2908                             2908   \n","(36.68, 39.0]              5182                             5182   \n","(39.0, 41.0]               3956                             3956   \n","(41.0, 43.0]               4002                             4002   \n","(43.0, 45.0]               4389                             4389   \n","(45.0, 46.975]             2419                             2419   \n","(46.975, 48.484]           4813                             4813   \n","(48.484, 50.0]             4900                             4900   \n","(50.0, 52.0]               4728                             4728   \n","(52.0, 54.0]               4681                             4681   \n","(54.0, 56.0]               4677                             4677   \n","(56.0, 58.662]             4483                             4483   \n","(58.662, 61.0]             6583                             6583   \n","(61.0, 64.0]               6968                             6968   \n","(64.0, 68.0]               6623                             6623   \n","(68.0, 74.0]               6753                             6753   \n","(74.0, 107.0]              7737                             7737   \n","\n","                  NumberOfTimes90DaysLate  NumberRealEstateLoansOrLines  \\\n","qcut                                                                      \n","(20.999, 28.0]                       4243                          4243   \n","(28.0, 31.047]                       3571                          3571   \n","(31.047, 34.0]                       4075                          4075   \n","(34.0, 36.68]                        2908                          2908   \n","(36.68, 39.0]                        5182                          5182   \n","(39.0, 41.0]                         3956                          3956   \n","(41.0, 43.0]                         4002                          4002   \n","(43.0, 45.0]                         4389                          4389   \n","(45.0, 46.975]                       2419                          2419   \n","(46.975, 48.484]                     4813                          4813   \n","(48.484, 50.0]                       4900                          4900   \n","(50.0, 52.0]                         4728                          4728   \n","(52.0, 54.0]                         4681                          4681   \n","(54.0, 56.0]                         4677                          4677   \n","(56.0, 58.662]                       4483                          4483   \n","(58.662, 61.0]                       6583                          6583   \n","(61.0, 64.0]                         6968                          6968   \n","(64.0, 68.0]                         6623                          6623   \n","(68.0, 74.0]                         6753                          6753   \n","(74.0, 107.0]                        7737                          7737   \n","\n","                  NumberOfTime60-89DaysPastDueNotWorse  NumberOfDependents  \n","qcut                                                                        \n","(20.999, 28.0]                                    4243                4243  \n","(28.0, 31.047]                                    3571                3571  \n","(31.047, 34.0]                                    4075                4075  \n","(34.0, 36.68]                                     2908                2908  \n","(36.68, 39.0]                                     5182                5182  \n","(39.0, 41.0]                                      3956                3956  \n","(41.0, 43.0]                                      4002                4002  \n","(43.0, 45.0]                                      4389                4389  \n","(45.0, 46.975]                                    2419                2419  \n","(46.975, 48.484]                                  4813                4813  \n","(48.484, 50.0]                                    4900                4900  \n","(50.0, 52.0]                                      4728                4728  \n","(52.0, 54.0]                                      4681                4681  \n","(54.0, 56.0]                                      4677                4677  \n","(56.0, 58.662]                                    4483                4483  \n","(58.662, 61.0]                                    6583                6583  \n","(61.0, 64.0]                                      6968                6968  \n","(64.0, 68.0]                                      6623                6623  \n","(68.0, 74.0]                                      6753                6753  \n","(74.0, 107.0]                                     7737                7737  "]},"metadata":{"tags":[]},"execution_count":154}]},{"metadata":{"id":"_H1VAI7OcWa_","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":391},"outputId":"b254dff0-f262-4f77-dd54-54e9604487fe","executionInfo":{"status":"ok","timestamp":1546352433625,"user_tz":-480,"elapsed":1359,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["model_data[model_data[\"SeriousDlqin2yrs\"] == 0].groupby(by=\"qcut\").count()[\"SeriousDlqin2yrs\"]"],"execution_count":155,"outputs":[{"output_type":"execute_result","data":{"text/plain":["qcut\n","(20.999, 28.0]      4243\n","(28.0, 31.047]      3571\n","(31.047, 34.0]      4075\n","(34.0, 36.68]       2908\n","(36.68, 39.0]       5182\n","(39.0, 41.0]        3956\n","(41.0, 43.0]        4002\n","(43.0, 45.0]        4389\n","(45.0, 46.975]      2419\n","(46.975, 48.484]    4813\n","(48.484, 50.0]      4900\n","(50.0, 52.0]        4728\n","(52.0, 54.0]        4681\n","(54.0, 56.0]        4677\n","(56.0, 58.662]      4483\n","(58.662, 61.0]      6583\n","(61.0, 64.0]        6968\n","(64.0, 68.0]        6623\n","(68.0, 74.0]        6753\n","(74.0, 107.0]       7737\n","Name: SeriousDlqin2yrs, dtype: int64"]},"metadata":{"tags":[]},"execution_count":155}]},{"metadata":{"id":"ElgsCzg_K4x0","colab_type":"code","colab":{}},"cell_type":"code","source":["# 统计每个分箱中0和1的数量\n","# 这里使用了数据透视表的功能groupby\n","coount_y0 = model_data[model_data[\"SeriousDlqin2yrs\"] == 0].groupby(by=\"qcut\").count()[\"SeriousDlqin2yrs\"]\n","coount_y1 = model_data[model_data[\"SeriousDlqin2yrs\"] == 1].groupby(by=\"qcut\").count()[\"SeriousDlqin2yrs\"]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"2GQSDR7tc_Hx","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"278059e9-a236-4f75-8fa6-fc87e37bbcbb","executionInfo":{"status":"ok","timestamp":1546346860887,"user_tz":-480,"elapsed":1170,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["[*zip([1,2,3],['a','b','c','d'])]"],"execution_count":71,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(1, 'a'), (2, 'b'), (3, 'c')]"]},"metadata":{"tags":[]},"execution_count":71}]},{"metadata":{"id":"_76ZTBaUdfHU","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"0b956bb4-518e-4ae1-fbf8-2ad4da41a77c","executionInfo":{"status":"ok","timestamp":1546352439571,"user_tz":-480,"elapsed":1634,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["updown.shape"],"execution_count":157,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(21,)"]},"metadata":{"tags":[]},"execution_count":157}]},{"metadata":{"id":"ng4K6YLlK4vB","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":357},"outputId":"5fa5ba96-86dc-4b72-f520-53d031e0b1ff","executionInfo":{"status":"ok","timestamp":1546352441914,"user_tz":-480,"elapsed":1315,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#num_bins值分别为每个区间的上界，下界，0出现的次数，1出现的次数\n","num_bins = [*zip(updown,updown[1:],coount_y0,coount_y1)]\n","#注意zip会按照最短列来进行结合\n","num_bins"],"execution_count":158,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(21.0, 28.0, 4243, 5975),\n"," (28.0, 31.046658442223148, 3571, 5712),\n"," (31.046658442223148, 34.0, 4075, 6598),\n"," (34.0, 36.67957524577571, 2908, 5920),\n"," (36.67957524577571, 39.0, 5182, 5799),\n"," (39.0, 41.0, 3956, 5594),\n"," (41.0, 43.0, 4002, 5818),\n"," (43.0, 45.0, 4389, 5698),\n"," (45.0, 46.9753970791641, 2419, 5895),\n"," (46.9753970791641, 48.484187473177656, 4813, 4937),\n"," (48.484187473177656, 50.0, 4900, 4892),\n"," (50.0, 52.0, 4728, 6024),\n"," (52.0, 54.0, 4681, 5362),\n"," (54.0, 56.0, 4677, 4454),\n"," (56.0, 58.66193042795457, 4483, 4551),\n"," (58.66193042795457, 61.0, 6583, 4005),\n"," (61.0, 64.0, 6968, 3758),\n"," (64.0, 68.0, 6623, 2645),\n"," (68.0, 74.0, 6753, 2122),\n"," (74.0, 107.0, 7737, 1558)]"]},"metadata":{"tags":[]},"execution_count":158}]},{"metadata":{"id":"IMA8kSRUeDLr","colab_type":"text"},"cell_type":"markdown","source":["## 2【选学】 确保每个箱中都有0和1"]},{"metadata":{"id":"JZmOOGWSdt0L","colab_type":"text"},"cell_type":"markdown","source":["## 3定义WOE和IV函数"]},{"metadata":{"id":"8yDi51qsevjH","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":204},"outputId":"9ca698a3-f55f-40b1-ac1e-2e6a9e90e522","executionInfo":{"status":"ok","timestamp":1546352445781,"user_tz":-480,"elapsed":1065,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["columns = [\"min\",\"max\",\"count_0\",\"count_1\"]\n","df = pd.DataFrame(num_bins,columns=columns)\n","df.head()"],"execution_count":159,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>min</th>\n","      <th>max</th>\n","      <th>count_0</th>\n","      <th>count_1</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>21.000000</td>\n","      <td>28.000000</td>\n","      <td>4243</td>\n","      <td>5975</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>28.000000</td>\n","      <td>31.046658</td>\n","      <td>3571</td>\n","      <td>5712</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>31.046658</td>\n","      <td>34.000000</td>\n","      <td>4075</td>\n","      <td>6598</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>34.000000</td>\n","      <td>36.679575</td>\n","      <td>2908</td>\n","      <td>5920</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>36.679575</td>\n","      <td>39.000000</td>\n","      <td>5182</td>\n","      <td>5799</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["         min        max  count_0  count_1\n","0  21.000000  28.000000     4243     5975\n","1  28.000000  31.046658     3571     5712\n","2  31.046658  34.000000     4075     6598\n","3  34.000000  36.679575     2908     5920\n","4  36.679575  39.000000     5182     5799"]},"metadata":{"tags":[]},"execution_count":159}]},{"metadata":{"id":"VV9aclN0fLnR","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":204},"outputId":"1d1cf404-b5fe-4798-f9fd-793b456a8677","executionInfo":{"status":"ok","timestamp":1546352448012,"user_tz":-480,"elapsed":522,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["df[\"total\"] = df.count_0 + df.count_1\n","df[\"percentage\"] = df.total / df.total.sum()\n","df[\"bad_rate\"] = df.count_1 / df.total\n","df[\"good%\"] = df.count_0/df.count_0.sum()\n","df[\"bad%\"] = df.count_1/df.count_1.sum()\n","df[\"woe\"] = np.log(df[\"good%\"] / df[\"bad%\"])\n","df.head()"],"execution_count":160,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>min</th>\n","      <th>max</th>\n","      <th>count_0</th>\n","      <th>count_1</th>\n","      <th>total</th>\n","      <th>percentage</th>\n","      <th>bad_rate</th>\n","      <th>good%</th>\n","      <th>bad%</th>\n","      <th>woe</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>21.000000</td>\n","      <td>28.000000</td>\n","      <td>4243</td>\n","      <td>5975</td>\n","      <td>10218</td>\n","      <td>0.052398</td>\n","      <td>0.584752</td>\n","      <td>0.043433</td>\n","      <td>0.061397</td>\n","      <td>-0.346149</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>28.000000</td>\n","      <td>31.046658</td>\n","      <td>3571</td>\n","      <td>5712</td>\n","      <td>9283</td>\n","      <td>0.047603</td>\n","      <td>0.615318</td>\n","      <td>0.036554</td>\n","      <td>0.058695</td>\n","      <td>-0.473559</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>31.046658</td>\n","      <td>34.000000</td>\n","      <td>4075</td>\n","      <td>6598</td>\n","      <td>10673</td>\n","      <td>0.054731</td>\n","      <td>0.618195</td>\n","      <td>0.041713</td>\n","      <td>0.067799</td>\n","      <td>-0.485732</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>34.000000</td>\n","      <td>36.679575</td>\n","      <td>2908</td>\n","      <td>5920</td>\n","      <td>8828</td>\n","      <td>0.045270</td>\n","      <td>0.670594</td>\n","      <td>0.029767</td>\n","      <td>0.060832</td>\n","      <td>-0.714707</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>36.679575</td>\n","      <td>39.000000</td>\n","      <td>5182</td>\n","      <td>5799</td>\n","      <td>10981</td>\n","      <td>0.056311</td>\n","      <td>0.528094</td>\n","      <td>0.053045</td>\n","      <td>0.059589</td>\n","      <td>-0.116330</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["         min        max  count_0  count_1  total  percentage  bad_rate  \\\n","0  21.000000  28.000000     4243     5975  10218    0.052398  0.584752   \n","1  28.000000  31.046658     3571     5712   9283    0.047603  0.615318   \n","2  31.046658  34.000000     4075     6598  10673    0.054731  0.618195   \n","3  34.000000  36.679575     2908     5920   8828    0.045270  0.670594   \n","4  36.679575  39.000000     5182     5799  10981    0.056311  0.528094   \n","\n","      good%      bad%       woe  \n","0  0.043433  0.061397 -0.346149  \n","1  0.036554  0.058695 -0.473559  \n","2  0.041713  0.067799 -0.485732  \n","3  0.029767  0.060832 -0.714707  \n","4  0.053045  0.059589 -0.116330  "]},"metadata":{"tags":[]},"execution_count":160}]},{"metadata":{"id":"08BNK-OdfouV","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"3edac436-5817-478e-c909-cf7f89b29ab2","executionInfo":{"status":"ok","timestamp":1546352451280,"user_tz":-480,"elapsed":858,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["rate = df[\"good%\"] - df[\"bad%\"]\n","iv = np.sum(rate * df.woe)\n","iv"],"execution_count":161,"outputs":[{"output_type":"execute_result","data":{"text/plain":["0.3312838502339025"]},"metadata":{"tags":[]},"execution_count":161}]},{"metadata":{"id":"HTBBvffrK4rx","colab_type":"code","colab":{}},"cell_type":"code","source":["#计算WOE和BAD RATE\n","#BAD RATE与bad%不是一个东西\n","#BAD RATE是一个箱中，坏的样本所占的比例 (bad/total)\n","#而bad%是一个箱中的坏样本占整个特征中的坏样本的比例\n","def get_woe(num_bins):\n","    # 通过 num_bins 数据计算 woe\n","    columns = [\"min\",\"max\",\"count_0\",\"count_1\"]\n","    df = pd.DataFrame(num_bins,columns=columns)\n","    df[\"total\"] = df.count_0 + df.count_1\n","    df[\"percentage\"] = df.total / df.total.sum()\n","    df[\"bad_rate\"] = df.count_1 / df.total\n","    df[\"good%\"] = df.count_0/df.count_0.sum()\n","    df[\"bad%\"] = df.count_1/df.count_1.sum()\n","    df[\"woe\"] = np.log(df[\"good%\"] / df[\"bad%\"])\n","    return df\n","#计算IV值\n","def get_iv(df):\n","    rate = df[\"good%\"] - df[\"bad%\"]\n","    iv = np.sum(rate * df.woe)\n","    return iv"],"execution_count":0,"outputs":[]},{"metadata":{"id":"M_SapsiEeWGh","colab_type":"text"},"cell_type":"markdown","source":["## 4 卡方检验，合并箱体，画出IV曲线"]},{"metadata":{"id":"qYnY_cgBK4pF","colab_type":"code","colab":{}},"cell_type":"code","source":["num_bins_ = num_bins.copy()\n","import matplotlib.pyplot as plt\n","import scipy"],"execution_count":0,"outputs":[]},{"metadata":{"id":"Mbikp7c5goz9","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":357},"outputId":"2a673829-abe6-48cf-d27a-c91a7faddcba","executionInfo":{"status":"ok","timestamp":1546352458081,"user_tz":-480,"elapsed":571,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["num_bins_"],"execution_count":164,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(21.0, 28.0, 4243, 5975),\n"," (28.0, 31.046658442223148, 3571, 5712),\n"," (31.046658442223148, 34.0, 4075, 6598),\n"," (34.0, 36.67957524577571, 2908, 5920),\n"," (36.67957524577571, 39.0, 5182, 5799),\n"," (39.0, 41.0, 3956, 5594),\n"," (41.0, 43.0, 4002, 5818),\n"," (43.0, 45.0, 4389, 5698),\n"," (45.0, 46.9753970791641, 2419, 5895),\n"," (46.9753970791641, 48.484187473177656, 4813, 4937),\n"," (48.484187473177656, 50.0, 4900, 4892),\n"," (50.0, 52.0, 4728, 6024),\n"," (52.0, 54.0, 4681, 5362),\n"," (54.0, 56.0, 4677, 4454),\n"," (56.0, 58.66193042795457, 4483, 4551),\n"," (58.66193042795457, 61.0, 6583, 4005),\n"," (61.0, 64.0, 6968, 3758),\n"," (64.0, 68.0, 6623, 2645),\n"," (68.0, 74.0, 6753, 2122),\n"," (74.0, 107.0, 7737, 1558)]"]},"metadata":{"tags":[]},"execution_count":164}]},{"metadata":{"id":"2eNhuC3KhtF2","colab_type":"code","colab":{}},"cell_type":"code","source":["pvs = []\n","# 获取 num_bins_两两之间的卡方检验的置信度（或卡方值）\n","for i in range(len(num_bins_)-1):\n","    x1 = num_bins_[i][2:]\n","    x2 = num_bins_[i+1][2:]\n","\n","    # 0 返回 chi2 值，1 返回 p 值。\n","    pv = scipy.stats.chi2_contingency([x1,x2])[1]\n","    # chi2 = scipy.stats.chi2_contingency([x1,x2])[0]\n","    pvs.append(pv)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"mD3kXLwihx8E","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":340},"outputId":"608ce5eb-25e4-4985-e2e8-e1757edd0913","executionInfo":{"status":"ok","timestamp":1546348085614,"user_tz":-480,"elapsed":958,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["pvs"],"execution_count":82,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[1.4541144216637752e-05,\n"," 0.6873868146616421,\n"," 3.408314218772921e-14,\n"," 2.5720153104769723e-91,\n"," 1.2459265971418666e-16,\n"," 0.3504558600526714,\n"," 8.662107210366625e-05,\n"," 3.1363312880202392e-90,\n"," 7.819830227985608e-169,\n"," 0.3514655435877374,\n"," 3.609208437057258e-18,\n"," 0.00014301230590775394,\n"," 1.943594963687778e-10,\n"," 0.032497229772238956,\n"," 9.136097086924781e-70,\n"," 2.4742336879122855e-05,\n"," 1.08182814425799e-22,\n"," 1.6054251295172654e-12,\n"," 5.348034041653975e-33]"]},"metadata":{"tags":[]},"execution_count":82}]},{"metadata":{"id":"R923JIaeh0qe","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"74d00e47-a7a4-428d-c174-6e17771c4ab2","executionInfo":{"status":"ok","timestamp":1546348097732,"user_tz":-480,"elapsed":1883,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["i = pvs.index(max(pvs))\n","i"],"execution_count":84,"outputs":[{"output_type":"execute_result","data":{"text/plain":["1"]},"metadata":{"tags":[]},"execution_count":84}]},{"metadata":{"id":"ptP4sIvCiJCW","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":51},"outputId":"62367572-43dc-47ef-8346-7932e4b7cd9e","executionInfo":{"status":"ok","timestamp":1546348178977,"user_tz":-480,"elapsed":1127,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["num_bins_[i:i+2]"],"execution_count":85,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(28.0, 31.046658442223148, 3571, 5712),\n"," (31.046658442223148, 34.0, 4075, 6598)]"]},"metadata":{"tags":[]},"execution_count":85}]},{"metadata":{"id":"KRLhPbP1iOWF","colab_type":"code","colab":{}},"cell_type":"code","source":["num_bins_[i:i+2] = [(\n","                    num_bins_[i][0],\n","                    num_bins_[i+1][1],\n","                    num_bins_[i][2]+num_bins_[i+1][2],\n","                    num_bins_[i][3]+num_bins_[i+1][3])]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"DJyH55jliTG0","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":340},"outputId":"9fe4dc6a-f882-464a-caa8-0a38ae564b67","executionInfo":{"status":"ok","timestamp":1546348234671,"user_tz":-480,"elapsed":2100,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["num_bins_"],"execution_count":88,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(21.0, 28.0, 4243, 5975),\n"," (28.0, 34.0, 7646, 12310),\n"," (34.0, 36.67957524577571, 2908, 5920),\n"," (36.67957524577571, 39.0, 5182, 5799),\n"," (39.0, 41.0, 3956, 5594),\n"," (41.0, 43.0, 4002, 5818),\n"," (43.0, 45.0, 4389, 5698),\n"," (45.0, 46.9753970791641, 2419, 5895),\n"," (46.9753970791641, 48.484187473177656, 4813, 4937),\n"," (48.484187473177656, 50.0, 4900, 4892),\n"," (50.0, 52.0, 4728, 6024),\n"," (52.0, 54.0, 4681, 5362),\n"," (54.0, 56.0, 4677, 4454),\n"," (56.0, 58.66193042795457, 4483, 4551),\n"," (58.66193042795457, 61.0, 6583, 4005),\n"," (61.0, 64.0, 6968, 3758),\n"," (64.0, 68.0, 6623, 2645),\n"," (68.0, 74.0, 6753, 2122),\n"," (74.0, 107.0, 7737, 1558)]"]},"metadata":{"tags":[]},"execution_count":88}]},{"metadata":{"id":"fOA5lrn2ia8R","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"219d32d1-bc4e-4681-c480-59b6411deed2","executionInfo":{"status":"ok","timestamp":1546348255181,"user_tz":-480,"elapsed":1005,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["len(num_bins_)"],"execution_count":89,"outputs":[{"output_type":"execute_result","data":{"text/plain":["19"]},"metadata":{"tags":[]},"execution_count":89}]},{"metadata":{"id":"z3SKFwlziwMK","colab_type":"text"},"cell_type":"markdown","source":["### 循环完成"]},{"metadata":{"id":"hglV1JOGgN_2","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":361},"outputId":"cbaeb3a3-a516-427f-cc41-426c2012d61a","executionInfo":{"status":"ok","timestamp":1546352471228,"user_tz":-480,"elapsed":2386,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["num_bins_ = num_bins.copy()\n","IV = []\n","axisx = []\n","\n","while len(num_bins_) > 2:\n","    pvs = []\n","    # 获取 num_bins_两两之间的卡方检验的置信度（或卡方值）\n","    for i in range(len(num_bins_)-1):\n","        x1 = num_bins_[i][2:]\n","        x2 = num_bins_[i+1][2:]\n","        \n","        # 0 返回 chi2 值，1 返回 p 值。\n","        pv = scipy.stats.chi2_contingency([x1,x2])[1]\n","        # chi2 = scipy.stats.chi2_contingency([x1,x2])[0]\n","        pvs.append(pv)\n","    # 通过 p 值进行处理。合并 p 值最大的两组\n","    i = pvs.index(max(pvs))\n","    num_bins_[i:i+2] = [(\n","                        num_bins_[i][0],\n","                        num_bins_[i+1][1],\n","                        num_bins_[i][2]+num_bins_[i+1][2],\n","                        num_bins_[i][3]+num_bins_[i+1][3])]\n","    bins_df = get_woe(num_bins_)\n","    axisx.append(len(num_bins_))\n","    IV.append(get_iv(bins_df))\n","plt.figure()\n","plt.plot(axisx,IV)\n","plt.xticks(axisx)\n","plt.xlabel(\"number of box\")\n","plt.ylabel(\"IV\")\n","plt.show()"],"execution_count":166,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<matplotlib.figure.Figure at 0x7f641c4d15c0>"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"wFGfazECjs2g","colab_type":"text"},"cell_type":"markdown","source":["## 5 用最佳分箱个数分箱，并验证分箱结果"]},{"metadata":{"id":"M8GovyHhK4ly","colab_type":"code","colab":{}},"cell_type":"code","source":["num_bins_ = num_bins.copy()\n","\n","def get_bin(num_bins_,n):\n","    while len(num_bins_) > n:\n","        pvs = []\n","        for i in range(len(num_bins_)-1):\n","            x1 = num_bins_[i][2:]\n","            x2 = num_bins_[i+1][2:]\n","            pv = scipy.stats.chi2_contingency([x1,x2])[1]\n","            # chi2 = scipy.stats.chi2_contingency([x1,x2])[0]\n","            pvs.append(pv)\n","        i = pvs.index(max(pvs))\n","        num_bins_[i:i+2] = [(\n","                            num_bins_[i][0],\n","                            num_bins_[i+1][1],\n","                            num_bins_[i][2]+num_bins_[i+1][2],\n","                            num_bins_[i][3]+num_bins_[i+1][3])]\n","    return num_bins_"],"execution_count":0,"outputs":[]},{"metadata":{"id":"OkM_4FG7kkxn","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":119},"outputId":"81437a5b-b041-4752-bd1e-ff9424255006","executionInfo":{"status":"ok","timestamp":1546352482049,"user_tz":-480,"elapsed":863,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["afterbins = get_bin(num_bins,6)\n","afterbins"],"execution_count":168,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(21.0, 45.0, 32326, 47114),\n"," (45.0, 46.9753970791641, 2419, 5895),\n"," (46.9753970791641, 58.66193042795457, 28282, 30220),\n"," (58.66193042795457, 64.0, 13551, 7763),\n"," (64.0, 74.0, 13376, 4767),\n"," (74.0, 107.0, 7737, 1558)]"]},"metadata":{"tags":[]},"execution_count":168}]},{"metadata":{"id":"WT50scgLkNUC","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":235},"outputId":"7f7cfbcc-4d77-4957-faea-032b87a8fe8d","executionInfo":{"status":"ok","timestamp":1546352485603,"user_tz":-480,"elapsed":879,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["bins_df = get_woe(afterbins)\n","bins_df"],"execution_count":169,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>min</th>\n","      <th>max</th>\n","      <th>count_0</th>\n","      <th>count_1</th>\n","      <th>total</th>\n","      <th>percentage</th>\n","      <th>bad_rate</th>\n","      <th>good%</th>\n","      <th>bad%</th>\n","      <th>woe</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>21.000000</td>\n","      <td>45.000000</td>\n","      <td>32326</td>\n","      <td>47114</td>\n","      <td>79440</td>\n","      <td>0.407368</td>\n","      <td>0.593077</td>\n","      <td>0.330900</td>\n","      <td>0.484129</td>\n","      <td>-0.380534</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>45.000000</td>\n","      <td>46.975397</td>\n","      <td>2419</td>\n","      <td>5895</td>\n","      <td>8314</td>\n","      <td>0.042634</td>\n","      <td>0.709045</td>\n","      <td>0.024762</td>\n","      <td>0.060575</td>\n","      <td>-0.894586</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>46.975397</td>\n","      <td>58.661930</td>\n","      <td>28282</td>\n","      <td>30220</td>\n","      <td>58502</td>\n","      <td>0.299998</td>\n","      <td>0.516564</td>\n","      <td>0.289505</td>\n","      <td>0.310532</td>\n","      <td>-0.070114</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>58.661930</td>\n","      <td>64.000000</td>\n","      <td>13551</td>\n","      <td>7763</td>\n","      <td>21314</td>\n","      <td>0.109298</td>\n","      <td>0.364221</td>\n","      <td>0.138713</td>\n","      <td>0.079770</td>\n","      <td>0.553256</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>64.000000</td>\n","      <td>74.000000</td>\n","      <td>13376</td>\n","      <td>4767</td>\n","      <td>18143</td>\n","      <td>0.093037</td>\n","      <td>0.262746</td>\n","      <td>0.136922</td>\n","      <td>0.048984</td>\n","      <td>1.027909</td>\n","    </tr>\n","    <tr>\n","      <th>5</th>\n","      <td>74.000000</td>\n","      <td>107.000000</td>\n","      <td>7737</td>\n","      <td>1558</td>\n","      <td>9295</td>\n","      <td>0.047665</td>\n","      <td>0.167617</td>\n","      <td>0.079199</td>\n","      <td>0.016010</td>\n","      <td>1.598775</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["         min         max  count_0  count_1  total  percentage  bad_rate  \\\n","0  21.000000   45.000000    32326    47114  79440    0.407368  0.593077   \n","1  45.000000   46.975397     2419     5895   8314    0.042634  0.709045   \n","2  46.975397   58.661930    28282    30220  58502    0.299998  0.516564   \n","3  58.661930   64.000000    13551     7763  21314    0.109298  0.364221   \n","4  64.000000   74.000000    13376     4767  18143    0.093037  0.262746   \n","5  74.000000  107.000000     7737     1558   9295    0.047665  0.167617   \n","\n","      good%      bad%       woe  \n","0  0.330900  0.484129 -0.380534  \n","1  0.024762  0.060575 -0.894586  \n","2  0.289505  0.310532 -0.070114  \n","3  0.138713  0.079770  0.553256  \n","4  0.136922  0.048984  1.027909  \n","5  0.079199  0.016010  1.598775  "]},"metadata":{"tags":[]},"execution_count":169}]},{"metadata":{"id":"uyrACzfvlKIc","colab_type":"text"},"cell_type":"markdown","source":["## 6 将选取最佳分箱个数的过程包装为函数"]},{"metadata":{"id":"1--ROyGnK4jM","colab_type":"code","colab":{}},"cell_type":"code","source":["def graphforbestbin(DF, X, Y, n=5,q=20,graph=True):\n","    \"\"\"\n","    自动最优分箱函数，基于卡方检验的分箱\n","    参数：\n","    DF: 需要输入的数据\n","    X: 需要分箱的列名\n","    Y: 分箱数据对应的标签 Y 列名\n","    n: 保留分箱个数\n","    q: 初始分箱的个数\n","    graph: 是否要画出IV图像\n","    区间为前开后闭 (]\n","    \"\"\"\n","    DF = DF[[X,Y]].copy()\n","    \n","    DF[\"qcut\"],bins = pd.qcut(DF[X], retbins=True, q=q,duplicates=\"drop\")\n","    coount_y0 = DF.loc[DF[Y]==0].groupby(by=\"qcut\").count()[Y]\n","    coount_y1 = DF.loc[DF[Y]==1].groupby(by=\"qcut\").count()[Y]\n","    num_bins = [*zip(bins,bins[1:],coount_y0,coount_y1)]\n","    for i in range(q):\n","        if 0 in num_bins[0][2:]:\n","            num_bins[0:2] = [(\n","                num_bins[0][0],\n","                num_bins[1][1],\n","                num_bins[0][2]+num_bins[1][2],\n","                num_bins[0][3]+num_bins[1][3])]\n","        continue\n","        for i in range(len(num_bins)):\n","            if 0 in num_bins[i][2:]:\n","                num_bins[i-1:i+1] = [(\n","                    num_bins[i-1][0],\n","                    num_bins[i][1],\n","                    num_bins[i-1][2]+num_bins[i][2],\n","                    num_bins[i-1][3]+num_bins[i][3])]\n","                break\n","        else:\n","            break\n","    def get_woe(num_bins):\n","        columns = [\"min\",\"max\",\"count_0\",\"count_1\"]\n","        df = pd.DataFrame(num_bins,columns=columns)\n","        df[\"total\"] = df.count_0 + df.count_1\n","        df[\"percentage\"] = df.total / df.total.sum()\n","        df[\"bad_rate\"] = df.count_1 / df.total\n","        df[\"good%\"] = df.count_0/df.count_0.sum()\n","        df[\"bad%\"] = df.count_1/df.count_1.sum()\n","        df[\"woe\"] = np.log(df[\"good%\"] / df[\"bad%\"])\n","        return df\n","    def get_iv(df):\n","        rate = df[\"good%\"] - df[\"bad%\"]\n","        iv = np.sum(rate * df.woe)\n","        return iv\n","    IV = []\n","    axisx = []\n","    while len(num_bins) > n:\n","        pvs = []\n","        for i in range(len(num_bins)-1):\n","            x1 = num_bins[i][2:]\n","            x2 = num_bins[i+1][2:]\n","            pv = scipy.stats.chi2_contingency([x1,x2])[1]\n","            pvs.append(pv)\n","        i = pvs.index(max(pvs))\n","        num_bins[i:i+2] = [(\n","                num_bins[i][0],\n","                num_bins[i+1][1],\n","                num_bins[i][2]+num_bins[i+1][2],\n","                num_bins[i][3]+num_bins[i+1][3])]\n","        \n","        bins_df = pd.DataFrame(get_woe(num_bins))\n","        axisx.append(len(num_bins))\n","        IV.append(get_iv(bins_df))\n","    if graph:\n","        plt.figure()\n","        plt.plot(axisx,IV)\n","        plt.xticks(axisx)\n","        plt.xlabel(\"number of box\")\n","        plt.ylabel(\"IV\")\n","        plt.show()\n","    return bins_df"],"execution_count":0,"outputs":[]},{"metadata":{"id":"fC8O96iymAv_","colab_type":"text"},"cell_type":"markdown","source":["## 7对所有特征进行分箱选择"]},{"metadata":{"id":"2Tq2tCs3K4gq","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":119},"outputId":"38abbe7e-faf0-4f02-a625-aa1f753ed378","executionInfo":{"status":"ok","timestamp":1546352492822,"user_tz":-480,"elapsed":883,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["model_data.columns"],"execution_count":171,"outputs":[{"output_type":"execute_result","data":{"text/plain":["Index(['SeriousDlqin2yrs', 'RevolvingUtilizationOfUnsecuredLines', 'age',\n","       'NumberOfTime30-59DaysPastDueNotWorse', 'DebtRatio', 'MonthlyIncome',\n","       'NumberOfOpenCreditLinesAndLoans', 'NumberOfTimes90DaysLate',\n","       'NumberRealEstateLoansOrLines', 'NumberOfTime60-89DaysPastDueNotWorse',\n","       'NumberOfDependents', 'qcut'],\n","      dtype='object')"]},"metadata":{"tags":[]},"execution_count":171}]},{"metadata":{"id":"Y3FTuclTpohS","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1071},"outputId":"749b0d65-245f-42ab-fb15-3088ea324173","executionInfo":{"status":"ok","timestamp":1546350172176,"user_tz":-480,"elapsed":848,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["model_data['NumberOfTime30-59DaysPastDueNotWorse']"],"execution_count":103,"outputs":[{"output_type":"execute_result","data":{"text/plain":["0         0.000000\n","1         0.000000\n","2         1.141971\n","3         0.000000\n","4         0.000000\n","5         0.000000\n","6         1.129686\n","7         0.000000\n","8         0.507314\n","9         0.000000\n","10        0.000000\n","11        0.000000\n","12        0.000000\n","13        0.000000\n","14        0.000000\n","15        0.000000\n","16        1.000000\n","17        0.000000\n","18        5.637304\n","19        5.870812\n","20        1.000000\n","21        2.890170\n","22        0.000000\n","23        0.000000\n","24        0.000000\n","25        0.000000\n","26        0.000000\n","27        0.000000\n","28        0.000000\n","29        0.000000\n","            ...   \n","194978    0.000000\n","194979    0.000000\n","194980    0.798543\n","194981    0.000000\n","194982    0.000000\n","194983    0.000000\n","194984    0.000000\n","194985    0.000000\n","194986    0.000000\n","194987    0.000000\n","194988    0.000000\n","194989    0.000000\n","194990    2.000000\n","194991    0.000000\n","194992    1.486638\n","194993    0.000000\n","194994    0.000000\n","194995    0.791011\n","194996    0.000000\n","194997    0.000000\n","194998    1.000000\n","194999    0.000000\n","195000    1.000000\n","195001    0.000000\n","195002    0.000000\n","195003    2.966830\n","195004    1.000000\n","195005    0.922931\n","195006    0.000000\n","195007    0.000000\n","Name: NumberOfTime30-59DaysPastDueNotWorse, Length: 195008, dtype: float64"]},"metadata":{"tags":[]},"execution_count":103}]},{"metadata":{"id":"lxggJSc_mGFB","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":1176},"outputId":"f1c213bb-fcbc-4305-c1e0-751e97fe45ab","executionInfo":{"status":"error","timestamp":1546352503018,"user_tz":-480,"elapsed":2135,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["for i in model_data.columns[1:-1]:\n","    print(i)\n","    graphforbestbin(model_data,i,\"SeriousDlqin2yrs\",n=2,q=20)"],"execution_count":172,"outputs":[{"output_type":"stream","text":["RevolvingUtilizationOfUnsecuredLines\n"],"name":"stdout"},{"output_type":"display_data","data":{"image/png":"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\nYII=\n","text/plain":["<matplotlib.figure.Figure at 0x7f641c4e4358>"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["age\n"],"name":"stdout"},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<matplotlib.figure.Figure at 0x7f641c42e2e8>"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["NumberOfTime30-59DaysPastDueNotWorse\n"],"name":"stdout"},{"output_type":"error","ename":"ValueError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)","\u001b[0;32m<ipython-input-172-c1e7d811d637>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mmodel_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      2\u001b[0m     \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m     \u001b[0mgraphforbestbin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel_data\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"SeriousDlqin2yrs\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mq\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m20\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m","\u001b[0;32m<ipython-input-170-6c3985e2fe5a>\u001b[0m in \u001b[0;36mgraphforbestbin\u001b[0;34m(DF, X, Y, n, q, graph)\u001b[0m\n\u001b[1;32m     56\u001b[0m             \u001b[0mx1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnum_bins\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     57\u001b[0m             \u001b[0mx2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnum_bins\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 58\u001b[0;31m             \u001b[0mpv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mscipy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstats\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchi2_contingency\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mx1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mx2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     59\u001b[0m             \u001b[0mpvs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpv\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     60\u001b[0m         \u001b[0mi\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpvs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpvs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.6/dist-packages/scipy/stats/contingency.py\u001b[0m in \u001b[0;36mchi2_contingency\u001b[0;34m(observed, correction, lambda_)\u001b[0m\n\u001b[1;32m    251\u001b[0m         \u001b[0mzeropos\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwhere\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpected\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    252\u001b[0m         raise ValueError(\"The internally computed table of expected \"\n\u001b[0;32m--> 253\u001b[0;31m                          \"frequencies has a zero element at %s.\" % (zeropos,))\n\u001b[0m\u001b[1;32m    254\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    255\u001b[0m     \u001b[0;31m# The degrees of freedom\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mValueError\u001b[0m: The internally computed table of expected frequencies has a zero element at (0, 0)."]}]},{"metadata":{"id":"Jgam3hgiK4d-","colab_type":"code","colab":{}},"cell_type":"code","source":["auto_col_bins = {\"RevolvingUtilizationOfUnsecuredLines\":6,\n","                \"age\":5,\n","                \"DebtRatio\":4,\n","                \"MonthlyIncome\":3,\n","                \"NumberOfOpenCreditLinesAndLoans\":3}\n","#不能使用自动分箱的变量\n","hand_bins = {\"NumberOfTime30-59DaysPastDueNotWorse\":[0,1,2,13]\n","            ,\"NumberOfTimes90DaysLate\":[0,1,2,17]\n","            ,\"NumberRealEstateLoansOrLines\":[0,1,2,4,54]\n","            ,\"NumberOfTime60-89DaysPastDueNotWorse\":[0,1,2,8]\n","            ,\"NumberOfDependents\":[0,1,2,3]}\n","#保证区间覆盖使用 np.inf替换最大值，用-np.inf替换最小值\n","hand_bins = {k:[-np.inf,*v[:-1],np.inf] for k,v in hand_bins.items()}"],"execution_count":0,"outputs":[]},{"metadata":{"id":"xwox7PMKK4bW","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"7f4e440f-1795-4e4f-ffef-f94be592bbc5","executionInfo":{"status":"ok","timestamp":1546352955198,"user_tz":-480,"elapsed":2303,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["bins_of_col = {}\n","# 生成自动分箱的分箱区间和分箱后的 IV 值\n","for col in auto_col_bins:\n","    bins_df = graphforbestbin(model_data,col\n","                                ,\"SeriousDlqin2yrs\"\n","                                ,n=auto_col_bins[col]\n","                                #使用字典的性质来取出每个特征所对应的箱的数量\n","                                ,q=20\n","                                ,graph=False)\n","    bins_list = sorted(set(bins_df[\"min\"]).union(bins_df[\"max\"]))\n","    #保证区间覆盖使用 np.inf 替换最大值 -np.inf 替换最小值\n","    bins_list[0],bins_list[-1] = -np.inf,np.inf\n","    bins_of_col[col] = bins_list"],"execution_count":190,"outputs":[{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:45: RuntimeWarning: divide by zero encountered in log\n"],"name":"stderr"}]},{"metadata":{"id":"iKwdhhJgK4Yb","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":408},"outputId":"ba649171-5f46-42ee-89dc-b614a6886dc3","executionInfo":{"status":"ok","timestamp":1546352957233,"user_tz":-480,"elapsed":833,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#合并手动分箱数据\n","bins_of_col.update(hand_bins)\n","bins_of_col"],"execution_count":191,"outputs":[{"output_type":"execute_result","data":{"text/plain":["{'DebtRatio': [-inf,\n","  0.01723790571264451,\n","  0.5036376475205819,\n","  1.4766941820578796,\n","  inf],\n"," 'MonthlyIncome': [-inf, 0.1, 7709.080643861425, inf],\n"," 'NumberOfDependents': [-inf, 0, 1, 2, inf],\n"," 'NumberOfOpenCreditLinesAndLoans': [-inf,\n","  8.890647307362393,\n","  9.081873597549807,\n","  inf],\n"," 'NumberOfTime30-59DaysPastDueNotWorse': [-inf, 0, 1, 2, inf],\n"," 'NumberOfTime60-89DaysPastDueNotWorse': [-inf, 0, 1, 2, inf],\n"," 'NumberOfTimes90DaysLate': [-inf, 0, 1, 2, inf],\n"," 'NumberRealEstateLoansOrLines': [-inf, 0, 1, 2, 4, inf],\n"," 'RevolvingUtilizationOfUnsecuredLines': [-inf,\n","  0.09909885424999999,\n","  0.29764654264798535,\n","  0.46519198100000003,\n","  0.982651233415105,\n","  0.9999998999999999,\n","  inf],\n"," 'age': [-inf, 45.0, 46.9753970791641, 58.66193042795457, 64.0, inf]}"]},"metadata":{"tags":[]},"execution_count":191}]},{"metadata":{"id":"c4zq4-FwqTN5","colab_type":"text"},"cell_type":"markdown","source":["# 计算各箱的WOE并映射到数据中"]},{"metadata":{"id":"bor6VjimK4VA","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":204},"outputId":"00f80d6d-6963-4c50-b65c-10e943e515c3","executionInfo":{"status":"ok","timestamp":1546352909733,"user_tz":-480,"elapsed":1382,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["data = model_data.copy()\n","#函数pd.cut，可以根据已知的分箱间隔把数据分箱\n","#参数为 pd.cut(数据，以列表表示的分箱间隔)\n","data = data[[\"age\",\"SeriousDlqin2yrs\"]].copy()\n","data[\"cut\"] = pd.cut(data[\"age\"],[-np.inf, 48.49986200790144, 58.757170160044694, 64.0,74.0, np.inf])\n","data.head()"],"execution_count":185,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>age</th>\n","      <th>SeriousDlqin2yrs</th>\n","      <th>cut</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>53.000000</td>\n","      <td>0</td>\n","      <td>(48.5, 58.757]</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>63.000000</td>\n","      <td>0</td>\n","      <td>(58.757, 64.0]</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>39.716057</td>\n","      <td>1</td>\n","      <td>(-inf, 48.5]</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>73.000000</td>\n","      <td>0</td>\n","      <td>(64.0, 74.0]</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>53.636002</td>\n","      <td>1</td>\n","      <td>(48.5, 58.757]</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["         age  SeriousDlqin2yrs             cut\n","0  53.000000                 0  (48.5, 58.757]\n","1  63.000000                 0  (58.757, 64.0]\n","2  39.716057                 1    (-inf, 48.5]\n","3  73.000000                 0    (64.0, 74.0]\n","4  53.636002                 1  (48.5, 58.757]"]},"metadata":{"tags":[]},"execution_count":185}]},{"metadata":{"id":"gbTQxCg6K3-P","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":221},"outputId":"efb190a0-2c8d-40b3-e97e-5af18477e9a9","executionInfo":{"status":"ok","timestamp":1546352547810,"user_tz":-480,"elapsed":540,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#将数据按分箱结果聚合，并取出其中的标签值\n","data.groupby(\"cut\")[\"SeriousDlqin2yrs\"].value_counts()"],"execution_count":177,"outputs":[{"output_type":"execute_result","data":{"text/plain":["cut             SeriousDlqin2yrs\n","(-inf, 48.5]    1                   57978\n","                0                   39558\n","(48.5, 58.757]  1                   25393\n","                0                   23469\n","(58.757, 64.0]  0                   13551\n","                1                    7621\n","(64.0, 74.0]    0                   13376\n","                1                    4767\n","(74.0, inf]     0                    7737\n","                1                    1558\n","Name: SeriousDlqin2yrs, dtype: int64"]},"metadata":{"tags":[]},"execution_count":177}]},{"metadata":{"id":"q0rrXMswrlyR","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":235},"outputId":"5f51b704-8366-49a8-d2f6-b21225889a46","executionInfo":{"status":"ok","timestamp":1546352551103,"user_tz":-480,"elapsed":1364,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#使用unstack()来将树状结构变成表状结构\n","data.groupby(\"cut\")[\"SeriousDlqin2yrs\"].value_counts().unstack()"],"execution_count":178,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th>SeriousDlqin2yrs</th>\n","      <th>0</th>\n","      <th>1</th>\n","    </tr>\n","    <tr>\n","      <th>cut</th>\n","      <th></th>\n","      <th></th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>(-inf, 48.5]</th>\n","      <td>39558</td>\n","      <td>57978</td>\n","    </tr>\n","    <tr>\n","      <th>(48.5, 58.757]</th>\n","      <td>23469</td>\n","      <td>25393</td>\n","    </tr>\n","    <tr>\n","      <th>(58.757, 64.0]</th>\n","      <td>13551</td>\n","      <td>7621</td>\n","    </tr>\n","    <tr>\n","      <th>(64.0, 74.0]</th>\n","      <td>13376</td>\n","      <td>4767</td>\n","    </tr>\n","    <tr>\n","      <th>(74.0, inf]</th>\n","      <td>7737</td>\n","      <td>1558</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["SeriousDlqin2yrs      0      1\n","cut                           \n","(-inf, 48.5]      39558  57978\n","(48.5, 58.757]    23469  25393\n","(58.757, 64.0]    13551   7621\n","(64.0, 74.0]      13376   4767\n","(74.0, inf]        7737   1558"]},"metadata":{"tags":[]},"execution_count":178}]},{"metadata":{"id":"z8_lF-iZrqyF","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":235},"outputId":"dfcfbf90-056f-4d5b-c36a-e9e2da10de7a","executionInfo":{"status":"ok","timestamp":1546350709515,"user_tz":-480,"elapsed":1417,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["bins_df = data.groupby(\"cut\")[\"SeriousDlqin2yrs\"].value_counts().unstack()\n","bins_df"],"execution_count":107,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th>SeriousDlqin2yrs</th>\n","      <th>0</th>\n","      <th>1</th>\n","    </tr>\n","    <tr>\n","      <th>cut</th>\n","      <th></th>\n","      <th></th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>(-inf, 48.5]</th>\n","      <td>39558</td>\n","      <td>57978</td>\n","    </tr>\n","    <tr>\n","      <th>(48.5, 58.757]</th>\n","      <td>23469</td>\n","      <td>25393</td>\n","    </tr>\n","    <tr>\n","      <th>(58.757, 64.0]</th>\n","      <td>13551</td>\n","      <td>7621</td>\n","    </tr>\n","    <tr>\n","      <th>(64.0, 74.0]</th>\n","      <td>13376</td>\n","      <td>4767</td>\n","    </tr>\n","    <tr>\n","      <th>(74.0, inf]</th>\n","      <td>7737</td>\n","      <td>1558</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["SeriousDlqin2yrs      0      1\n","cut                           \n","(-inf, 48.5]      39558  57978\n","(48.5, 58.757]    23469  25393\n","(58.757, 64.0]    13551   7621\n","(64.0, 74.0]      13376   4767\n","(74.0, inf]        7737   1558"]},"metadata":{"tags":[]},"execution_count":107}]},{"metadata":{"id":"l6QMwAUJrwCT","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":235},"outputId":"a13a00ef-b699-4883-92b6-0cdd8b62dfa0","executionInfo":{"status":"ok","timestamp":1546350750617,"user_tz":-480,"elapsed":852,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["bins_df[\"woe\"] = np.log((bins_df[0]/bins_df[0].sum())/(bins_df[1]/bins_df[1].sum()))\n","bins_df"],"execution_count":108,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th>SeriousDlqin2yrs</th>\n","      <th>0</th>\n","      <th>1</th>\n","      <th>woe</th>\n","    </tr>\n","    <tr>\n","      <th>cut</th>\n","      <th></th>\n","      <th></th>\n","      <th></th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>(-inf, 48.5]</th>\n","      <td>39558</td>\n","      <td>57978</td>\n","      <td>-0.386131</td>\n","    </tr>\n","    <tr>\n","      <th>(48.5, 58.757]</th>\n","      <td>23469</td>\n","      <td>25393</td>\n","      <td>-0.082629</td>\n","    </tr>\n","    <tr>\n","      <th>(58.757, 64.0]</th>\n","      <td>13551</td>\n","      <td>7621</td>\n","      <td>0.571717</td>\n","    </tr>\n","    <tr>\n","      <th>(64.0, 74.0]</th>\n","      <td>13376</td>\n","      <td>4767</td>\n","      <td>1.027909</td>\n","    </tr>\n","    <tr>\n","      <th>(74.0, inf]</th>\n","      <td>7737</td>\n","      <td>1558</td>\n","      <td>1.598775</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["SeriousDlqin2yrs      0      1       woe\n","cut                                     \n","(-inf, 48.5]      39558  57978 -0.386131\n","(48.5, 58.757]    23469  25393 -0.082629\n","(58.757, 64.0]    13551   7621  0.571717\n","(64.0, 74.0]      13376   4767  1.027909\n","(74.0, inf]        7737   1558  1.598775"]},"metadata":{"tags":[]},"execution_count":108}]},{"metadata":{"id":"TFVFPe0LK36z","colab_type":"code","colab":{}},"cell_type":"code","source":["def get_woe2(df,col,y,bins):\n","    df = df[[col,y]].copy()\n","    df[\"cut\"] = pd.cut(df[col],bins)\n","    bins_df = df.groupby(\"cut\")[y].value_counts().unstack()\n","    woe = bins_df[\"woe\"] = np.log((bins_df[0]/bins_df[0].sum())/(bins_df[1]/bins_df[1].sum()))\n","    return woe"],"execution_count":0,"outputs":[]},{"metadata":{"id":"cwZpfQhBraB_","colab_type":"code","colab":{}},"cell_type":"code","source":["#将所有特征的WOE存储到字典当中\n","woeall = {}\n","for col in bins_of_col:\n","    woeall[col] = get_woe2(model_data,col,\"SeriousDlqin2yrs\",bins_of_col[col])"],"execution_count":0,"outputs":[]},{"metadata":{"id":"YRxWmWxLsZow","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":918},"outputId":"b31c8b42-0e4a-4424-f363-ff696d59d8cf","executionInfo":{"status":"ok","timestamp":1546352968474,"user_tz":-480,"elapsed":545,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["woeall"],"execution_count":193,"outputs":[{"output_type":"execute_result","data":{"text/plain":["{'DebtRatio': cut\n"," (-inf, 0.0172]     1.493300\n"," (0.0172, 0.504]   -0.009393\n"," (0.504, 1.477]    -0.472798\n"," (1.477, inf]       0.174472\n"," dtype: float64, 'MonthlyIncome': cut\n"," (-inf, 0.1]        1.360305\n"," (0.1, 7709.081]   -0.175220\n"," (7709.081, inf]    0.355978\n"," dtype: float64, 'NumberOfDependents': cut\n"," (-inf, 0.0]    0.631259\n"," (0.0, 1.0]    -0.582210\n"," (1.0, 2.0]    -0.531595\n"," (2.0, inf]    -0.479840\n"," dtype: float64, 'NumberOfOpenCreditLinesAndLoans': cut\n"," (-inf, 8.891]    -0.100128\n"," (8.891, 9.082]    1.219887\n"," (9.082, inf]      0.016237\n"," dtype: float64, 'NumberOfTime30-59DaysPastDueNotWorse': cut\n"," (-inf, 0.0]    1.092955\n"," (0.0, 1.0]    -1.380308\n"," (1.0, 2.0]    -2.048467\n"," (2.0, inf]    -2.306575\n"," dtype: float64, 'NumberOfTime60-89DaysPastDueNotWorse': cut\n"," (-inf, 0.0]    0.540065\n"," (0.0, 1.0]    -2.460551\n"," (1.0, 2.0]    -2.925575\n"," (2.0, inf]    -2.880735\n"," dtype: float64, 'NumberOfTimes90DaysLate': cut\n"," (-inf, 0.0]    0.695135\n"," (0.0, 1.0]    -2.574850\n"," (1.0, 2.0]    -2.971783\n"," (2.0, inf]    -3.147133\n"," dtype: float64, 'NumberRealEstateLoansOrLines': cut\n"," (-inf, 0.0]    0.196166\n"," (0.0, 1.0]     0.010661\n"," (1.0, 2.0]    -0.122637\n"," (2.0, 4.0]    -0.415497\n"," (4.0, inf]    -0.825222\n"," dtype: float64, 'RevolvingUtilizationOfUnsecuredLines': cut\n"," (-inf, 0.0991]     2.203963\n"," (0.0991, 0.298]    0.664389\n"," (0.298, 0.465]    -0.122636\n"," (0.465, 0.983]    -1.073433\n"," (0.983, 1.0]      -0.469400\n"," (1.0, inf]        -2.044111\n"," dtype: float64, 'age': cut\n"," (-inf, 45.0]       -0.380534\n"," (45.0, 46.975]     -0.894586\n"," (46.975, 58.662]   -0.070114\n"," (58.662, 64.0]      0.553256\n"," (64.0, inf]         1.201543\n"," dtype: float64}"]},"metadata":{"tags":[]},"execution_count":193}]},{"metadata":{"id":"RknJrTDnK34g","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":241},"outputId":"c9018ac5-6950-4474-fe1b-df302319572b","executionInfo":{"status":"ok","timestamp":1546352977821,"user_tz":-480,"elapsed":1894,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["#不希望覆盖掉原本的数据，创建一个新的DataFrame，索引和原始数据model_data一模一样\n","model_woe = pd.DataFrame(index=model_data.index)\n","#将原数据分箱后，按箱的结果把WOE结构用map函数映射到数据中\n","model_woe[\"age\"] = pd.cut(model_data[\"age\"],bins_of_col[\"age\"]).map(woeall[\"age\"])\n","#对所有特征操作可以写成：\n","for col in bins_of_col:\n","    model_woe[col] = pd.cut(model_data[col],bins_of_col[col]).map(woeall[col])\n","    \n","#将标签补充到数据中\n","model_woe[\"SeriousDlqin2yrs\"] = model_data[\"SeriousDlqin2yrs\"]\n","\n","#这就是我们的建模数据了\n","model_woe.head()"],"execution_count":194,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>age</th>\n","      <th>RevolvingUtilizationOfUnsecuredLines</th>\n","      <th>DebtRatio</th>\n","      <th>MonthlyIncome</th>\n","      <th>NumberOfOpenCreditLinesAndLoans</th>\n","      <th>NumberOfTime30-59DaysPastDueNotWorse</th>\n","      <th>NumberOfTimes90DaysLate</th>\n","      <th>NumberRealEstateLoansOrLines</th>\n","      <th>NumberOfTime60-89DaysPastDueNotWorse</th>\n","      <th>NumberOfDependents</th>\n","      <th>SeriousDlqin2yrs</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>-0.070114</td>\n","      <td>2.203963</td>\n","      <td>-0.009393</td>\n","      <td>-0.175220</td>\n","      <td>-0.100128</td>\n","      <td>1.092955</td>\n","      <td>0.695135</td>\n","      <td>0.196166</td>\n","      <td>0.540065</td>\n","      <td>0.631259</td>\n","      <td>0</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>0.553256</td>\n","      <td>0.664389</td>\n","      <td>-0.009393</td>\n","      <td>-0.175220</td>\n","      <td>-0.100128</td>\n","      <td>1.092955</td>\n","      <td>0.695135</td>\n","      <td>0.196166</td>\n","      <td>0.540065</td>\n","      <td>0.631259</td>\n","      <td>0</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>-0.380534</td>\n","      <td>-2.044111</td>\n","      <td>-0.009393</td>\n","      <td>-0.175220</td>\n","      <td>-0.100128</td>\n","      <td>-2.048467</td>\n","      <td>-2.574850</td>\n","      <td>0.010661</td>\n","      <td>-2.925575</td>\n","      <td>-0.479840</td>\n","      <td>1</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>1.201543</td>\n","      <td>2.203963</td>\n","      <td>-0.472798</td>\n","      <td>-0.175220</td>\n","      <td>0.016237</td>\n","      <td>1.092955</td>\n","      <td>0.695135</td>\n","      <td>-0.122637</td>\n","      <td>0.540065</td>\n","      <td>0.631259</td>\n","      <td>0</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>-0.070114</td>\n","      <td>-1.073433</td>\n","      <td>-0.009393</td>\n","      <td>0.355978</td>\n","      <td>0.016237</td>\n","      <td>1.092955</td>\n","      <td>0.695135</td>\n","      <td>-0.122637</td>\n","      <td>0.540065</td>\n","      <td>-0.582210</td>\n","      <td>1</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["        age  RevolvingUtilizationOfUnsecuredLines  DebtRatio  MonthlyIncome  \\\n","0 -0.070114                              2.203963  -0.009393      -0.175220   \n","1  0.553256                              0.664389  -0.009393      -0.175220   \n","2 -0.380534                             -2.044111  -0.009393      -0.175220   \n","3  1.201543                              2.203963  -0.472798      -0.175220   \n","4 -0.070114                             -1.073433  -0.009393       0.355978   \n","\n","   NumberOfOpenCreditLinesAndLoans  NumberOfTime30-59DaysPastDueNotWorse  \\\n","0                        -0.100128                              1.092955   \n","1                        -0.100128                              1.092955   \n","2                        -0.100128                             -2.048467   \n","3                         0.016237                              1.092955   \n","4                         0.016237                              1.092955   \n","\n","   NumberOfTimes90DaysLate  NumberRealEstateLoansOrLines  \\\n","0                 0.695135                      0.196166   \n","1                 0.695135                      0.196166   \n","2                -2.574850                      0.010661   \n","3                 0.695135                     -0.122637   \n","4                 0.695135                     -0.122637   \n","\n","   NumberOfTime60-89DaysPastDueNotWorse  NumberOfDependents  SeriousDlqin2yrs  \n","0                              0.540065            0.631259                 0  \n","1                              0.540065            0.631259                 0  \n","2                             -2.925575           -0.479840                 1  \n","3                              0.540065            0.631259                 0  \n","4                              0.540065           -0.582210                 1  "]},"metadata":{"tags":[]},"execution_count":194}]},{"metadata":{"id":"zahzAsbStLrm","colab_type":"text"},"cell_type":"markdown","source":["# 建模与模型验证"]},{"metadata":{"id":"72TeRLp_typg","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":289},"outputId":"7a528a80-741f-482d-e493-d4ea9faf984a","executionInfo":{"status":"ok","timestamp":1546352984160,"user_tz":-480,"elapsed":1359,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["model_woe.info()"],"execution_count":195,"outputs":[{"output_type":"stream","text":["<class 'pandas.core.frame.DataFrame'>\n","RangeIndex: 195008 entries, 0 to 195007\n","Data columns (total 11 columns):\n","age                                     195008 non-null float64\n","RevolvingUtilizationOfUnsecuredLines    195008 non-null float64\n","DebtRatio                               195008 non-null float64\n","MonthlyIncome                           195008 non-null float64\n","NumberOfOpenCreditLinesAndLoans         195008 non-null float64\n","NumberOfTime30-59DaysPastDueNotWorse    195008 non-null float64\n","NumberOfTimes90DaysLate                 195008 non-null float64\n","NumberRealEstateLoansOrLines            195008 non-null float64\n","NumberOfTime60-89DaysPastDueNotWorse    195008 non-null float64\n","NumberOfDependents                      195008 non-null float64\n","SeriousDlqin2yrs                        195008 non-null int64\n","dtypes: float64(10), int64(1)\n","memory usage: 16.4 MB\n"],"name":"stdout"}]},{"metadata":{"id":"0ht6fTHiK317","colab_type":"code","colab":{}},"cell_type":"code","source":["#处理测试集\n","vali_woe = pd.DataFrame(index=vali_data.index)\n","for col in bins_of_col:\n","    vali_woe[col] = pd.cut(vali_data[col],bins_of_col[col]).map(woeall[col])\n","vali_woe[\"SeriousDlqin2yrs\"] = vali_data[\"SeriousDlqin2yrs\"]\n","vali_X = vali_woe.iloc[:,:-1]\n","vali_y = vali_woe.iloc[:,-1]\n","X = model_woe.iloc[:,:-1]\n","y = model_woe.iloc[:,-1]"],"execution_count":0,"outputs":[]},{"metadata":{"id":"A3xUysotuaPV","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":289},"outputId":"74d8fb91-dd9f-46dd-a4ae-cb424b9cd9ae","executionInfo":{"status":"ok","timestamp":1546352991205,"user_tz":-480,"elapsed":1115,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["vali_woe.info()"],"execution_count":197,"outputs":[{"output_type":"stream","text":["<class 'pandas.core.frame.DataFrame'>\n","RangeIndex: 83576 entries, 0 to 83575\n","Data columns (total 11 columns):\n","RevolvingUtilizationOfUnsecuredLines    83576 non-null float64\n","age                                     83576 non-null float64\n","DebtRatio                               83576 non-null float64\n","MonthlyIncome                           83576 non-null float64\n","NumberOfOpenCreditLinesAndLoans         83576 non-null float64\n","NumberOfTime30-59DaysPastDueNotWorse    83576 non-null float64\n","NumberOfTimes90DaysLate                 83576 non-null float64\n","NumberRealEstateLoansOrLines            83576 non-null float64\n","NumberOfTime60-89DaysPastDueNotWorse    83576 non-null float64\n","NumberOfDependents                      83576 non-null float64\n","SeriousDlqin2yrs                        83576 non-null int64\n","dtypes: float64(10), int64(1)\n","memory usage: 7.0 MB\n"],"name":"stdout"}]},{"metadata":{"id":"mK6tnav-tUAA","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":88},"outputId":"1e3c583d-1c77-40e1-f80f-01aabaaffab2","executionInfo":{"status":"ok","timestamp":1546353036899,"user_tz":-480,"elapsed":1849,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["from sklearn.linear_model import LogisticRegression as LR\n","lr = LR().fit(X,y)\n","lr.score(vali_X,vali_y)"],"execution_count":200,"outputs":[{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/sklearn/linear_model/logistic.py:433: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n","  FutureWarning)\n"],"name":"stderr"},{"output_type":"execute_result","data":{"text/plain":["0.8636450655690628"]},"metadata":{"tags":[]},"execution_count":200}]},{"metadata":{"id":"TzxVnkVy0qZm","colab_type":"code","colab":{}},"cell_type":"code","source":["c_1 = np.linspace(0.01,1,20)\n","c_2 = np.linspace(0.01,0.2,20)"],"execution_count":0,"outputs":[]},{"metadata":{"id":"gtySSB9TK3zj","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":347},"outputId":"f8bfb31f-e926-4e08-b15a-680e2af467fc","executionInfo":{"status":"ok","timestamp":1546353029699,"user_tz":-480,"elapsed":23690,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["score = []\n","for i in c_2:\n","    lr = LR(solver='liblinear',C=i).fit(X,y)\n","    score.append(lr.score(vali_X,vali_y))\n","plt.figure()\n","plt.plot(c_2,score)\n","plt.show()"],"execution_count":199,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nX/hc9bQmX/9M7dixg5///OcYjUaSkpJ47rnnMBqN7vtMOcRt8vPzHf/0T//kcDgcjo8//thx//33\nf+rxGTNmOE6fPu1ob293PPTQQ44jR4448vLyHP/wD//gcDgcjrNnzzqmTJnicDgcjnnz5jn++te/\nurX9X6Q3Ne3YscPxxBNPfO5YP/zhDx1vvfWWw+FwOP793//dsXr1atcX8CV6U9dnn//MM884HA6H\n49FHH3UcOnTIPQ2/gu5qWrJkieOVV15xfO1rX+v2Od7yXvWmJm//TDkcvavL2z9Xvanps8/3tc/U\n9OnTHWVlZQ6Hw+F44oknHO+//75bP1MaonejvLw8srKyAEhJSaG2tpb6+noATp48SUREBAkJCRiN\nRqZMmUJeXh5jx47lV7/6FQDh4eE0NjbS3t7usRo+qzc1fZn8/HymTZsGwNSpU6/4u652rXX9x3/8\nB//yL//i9nZfyZVqAvjud7/b9Xh3z/GW96o3NXn7Zwp6V9eX8eX36nK++Jlat24d8fHxAERHR1NT\nU+PWz5QC3o2qqqqIiorq+jk6OprKykoAKisriY6O/txjJpOpaxjq9ddfZ/LkyZhMJgBee+01Zs2a\nxXe/+13Onj3rxko+0ZuaAD7++GO+/e1v89BDD7Ft2zYAGhsbu4akYmJiun7XE3pbF8C+fftISEjA\nZrN1/d2LL77II488Qk5ODk1NTW6o4POuVBOA1Wq96ud4y3vVm5q8/TMFvasLvPtz1duawPc/UxUV\nFWzbto0pU6a49TOlgPcgRw/uEvyXv/yF119/nZycHADuvvtuvv/977Nq1SqGDx/Or3/9a1c1s0eu\npqaBAwfy+OOP81//9V+88MILLFy4kJaWlh4fx5160p7XX3+dr33ta10/z5o1i6effprVq1djMBhY\nvXq1K5rYY715jb/oOd70XvnjZwr883N1vXymqqur+fa3v83ixYs/FexXeo6z3icFvBvFxcVRVVXV\n9XNFRUXXN9LPPlZeXk5cXBwAf//73/nNb37Db3/7W8LCwgCYMGECw4cPB+DWW2/l8OHD7irjU3pT\nk91u56tf/SoGg4HExERiY2MpLy8nJCSk65v45fV7Qm/fK+gcEh09enTXz9OnTycxMRHw3veqp8/x\nlveqNzWBd3+moHd1efvnqrfvFfjuZ6q+vp5//Md/5Dvf+Q6TJk264nNc8T4p4N0oMzOTjRs3AlBY\nWEhcXFzXEE6/fv2or6/n1KlTtLW18d5775GZmcn58+f56U9/yvLly7tm9wI88cQTnDx5Euj8x39p\n5qy79aam9evXk5ubC3QOd1dXV2O325k4cWLXsTZt2sTNN9/skZqgd3VB5wczNDS0a6jN4XDw2GOP\nUVdXB3jve9XT53jLe9Wbmrz9MwW9q8vbP1e9qQl8+zP1k5/8hNmzZzN58uRun+OK90m7ybnZz372\nMz788EMMBgOLFy/mwIEDhIWFMX36dD744AN+9rOfAXDbbbeRnZ3NmjVreOmll0hKSuo6xgsvvMCJ\nEydYtmwZwcHBhISE8PzzzxMTE+MTNdXX1/P973+furo6Wltbefzxx5kyZQoVFRXMmzeP5uZm+vTp\nw/PPP4/FYvFITb2pCzqX8fzyl79k5cqVXcd56623WLlyJcHBwdjtdp577jmCg4O9rqYnn3ySM2fO\ncOTIEdLS0rj//vu56667PvecYcOGedV71dOaGhoavP4z1Zu6pk6d6vWfq978+/PVz9SkSZMYO3bs\np0Ye7rzzTh544AG3faYU8CIiIn5IQ/QiIiJ+SAEvIiLihxTwIiIifkgBLyIi4ocU8CIiIn5IAS8i\nIuKHFPAiIiJ+SAEvIiLih/4/CmKOkeQ33qoAAAAASUVORK5CYII=\n","text/plain":["<matplotlib.figure.Figure at 0x7f641c3a1390>"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"FWedp7nAK3v5","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"97ab6fb6-0ad9-4b09-8dfe-132f06849f41","executionInfo":{"status":"ok","timestamp":1546353042262,"user_tz":-480,"elapsed":1545,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["lr.n_iter_"],"execution_count":201,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([7], dtype=int32)"]},"metadata":{"tags":[]},"execution_count":201}]},{"metadata":{"id":"qGh3QGRXuHpd","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":571},"outputId":"e32b1c48-f716-4bd8-c32c-c6eebcbca664","executionInfo":{"status":"ok","timestamp":1546353048668,"user_tz":-480,"elapsed":4499,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["score = []\n","for i in [1,2,3,4,5,6]:\n","    lr = LR(solver='liblinear',C=0.025,max_iter=i).fit(X,y)\n","    score.append(lr.score(vali_X,vali_y))\n","plt.figure()\n","plt.plot([1,2,3,4,5,6],score)\n","plt.show()"],"execution_count":202,"outputs":[{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n","  \"the number of iterations.\", ConvergenceWarning)\n","/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n","  \"the number of iterations.\", ConvergenceWarning)\n","/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n","  \"the number of iterations.\", ConvergenceWarning)\n","/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n","  \"the number of iterations.\", ConvergenceWarning)\n","/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n","  \"the number of iterations.\", ConvergenceWarning)\n","/usr/local/lib/python3.6/dist-packages/sklearn/svm/base.py:922: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n","  \"the number of iterations.\", ConvergenceWarning)\n"],"name":"stderr"},{"output_type":"display_data","data":{"image/png":"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\ni4iIBAAFtoiISABQYIuIiAQABbaIiEgAUGCLiIgEAL++cIqIiIi00h62iIhIAFBgi4iIBAAFtoiI\nSABQYIuIiAQABbaIiEgAUGCLiIgEgKAK7H379pGdnc1bb71ldikB62c/+xnTp09n6tSpFBQUmF1O\nQKmvr+e5557j+9//PtOmTWPdunVmlxTQGhoayM7OJj8/3+xSAs7mzZu5+eabefzxx3n88cf5yU9+\nYnZJAWnFihXce++9PPjgg6xfv77T12fr9DX4ibq6On7yk58wZswYs0sJWJs2bWL//v3k5eVRXV3N\nAw88wB133GF2WQFj3bp1jBw5kieeeIKysjJmz57NxIkTzS4rYP32t78lKirK7DIC1o033sjrr79u\ndhkBq7q6ml//+tcsX76curo63njjDSZMmNCp6wyawA4NDWXRokUsWrTI7FIC1g033EBaWhoAkZGR\n1NfX09LSgtVqNbmywDB58uS228ePHycuLs7EagKby+XiwIEDnf4CKXIxhYWFjBkzBofDgcPh6JKj\nFEFzSNxms9GjRw+zywhoVquV8PBwAJYtW8a4ceMU1ldhxowZ/PCHPyQ3N9fsUgLWq6++yo9+9COz\nywhoBw4c4Mknn+SRRx7h008/NbucgHP06FEaGhp48sknefTRRyksLOz0dQbNHrZ0nL/97W8sW7aM\nP/zhD2aXEpCWLl3Knj17eOGFF1ixYgUWi8XskgLKe++9x3XXXUdCQoLZpQSspKQknnnmGe6++26O\nHDnCzJkzKSgoIDQ01OzSAsrp06f51a9+xbFjx5g5cybr1q3r1N9nBbZckY8//pjf/e53vPnmm0RE\nRJhdTkApLi6mT58+9O/fn2uvvZaWlhaqqqro06eP2aUFlPXr13PkyBHWr1/PiRMnCA0NpV+/fowd\nO9bs0gJGXFxc21s0iYmJ9O3bl5MnT+qPoCvQp08fMjIysNlsJCYm0qtXr07/fQ6aQ+LiuzNnzvCz\nn/2MhQsX0rt3b7PLCThbtmxpOypRWVlJXV0d0dHRJlcVeH75y1+yfPly3n77baZNm8bTTz+tsL5C\nK1asYPHixQBUVFRw6tQpnVNxhW655RY2bdqE1+ulurq6S36fg2YPu7i4mFdffZWysjJsNhurV6/m\njTfeUPBcgY8++ojq6mqef/75tq+9+uqrDBgwwMSqAseMGTOYN28ejz76KA0NDcyfP5+QEP3NLF3v\ntttu44c//CFr166lubmZH//4xzocfoXi4uK48847efjhhwF46aWXOv33WeM1RUREAoD+vBcREQkA\nCmwREZEAoMAWEREJAApsERGRAKDAFhERCQAKbBERkQCgwBYREQkACmwREZEA8P8AacuhOcYYjNMA\nAAAASUVORK5CYII=\n","text/plain":["<matplotlib.figure.Figure at 0x7f641c317780>"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"pgUs-sCw0zHW","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":275},"outputId":"8283b275-8677-4568-bcbe-5c62cde99e36","executionInfo":{"status":"ok","timestamp":1546353183835,"user_tz":-480,"elapsed":7174,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["!pip install scikit-plot"],"execution_count":207,"outputs":[{"output_type":"stream","text":["Collecting scikit-plot\n","  Downloading https://files.pythonhosted.org/packages/7c/47/32520e259340c140a4ad27c1b97050dd3254fdc517b1d59974d47037510e/scikit_plot-0.3.7-py3-none-any.whl\n","Requirement already satisfied: scipy>=0.9 in /usr/local/lib/python3.6/dist-packages (from scikit-plot) (1.1.0)\n","Requirement already satisfied: scikit-learn>=0.18 in /usr/local/lib/python3.6/dist-packages (from scikit-plot) (0.20.1)\n","Requirement already satisfied: matplotlib>=1.4.0 in /usr/local/lib/python3.6/dist-packages (from scikit-plot) (2.1.2)\n","Requirement already satisfied: joblib>=0.10 in /usr/local/lib/python3.6/dist-packages (from scikit-plot) (0.13.0)\n","Requirement already satisfied: numpy>=1.8.2 in /usr/local/lib/python3.6/dist-packages (from scipy>=0.9->scikit-plot) (1.14.6)\n","Requirement already satisfied: pytz in /usr/local/lib/python3.6/dist-packages (from matplotlib>=1.4.0->scikit-plot) (2018.7)\n","Requirement already satisfied: six>=1.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=1.4.0->scikit-plot) (1.11.0)\n","Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=1.4.0->scikit-plot) (2.3.0)\n","Requirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=1.4.0->scikit-plot) (2.5.3)\n","Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.6/dist-packages (from matplotlib>=1.4.0->scikit-plot) (0.10.0)\n","Installing collected packages: scikit-plot\n","Successfully installed scikit-plot-0.3.7\n"],"name":"stdout"}]},{"metadata":{"id":"GrAr3wn2K3sv","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":426},"outputId":"952377d0-2029-4fde-c594-2f8630cae0c0","executionInfo":{"status":"ok","timestamp":1546353186053,"user_tz":-480,"elapsed":1073,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["import scikitplot as skplt\n","#%%cmd\n","#pip install scikit-plot\n","vali_proba_df = pd.DataFrame(lr.predict_proba(vali_X))\n","skplt.metrics.plot_roc(vali_y, vali_proba_df,\n","                        plot_micro=False,figsize=(6,6),\n","                        plot_macro=False)"],"execution_count":208,"outputs":[{"output_type":"execute_result","data":{"text/plain":["<matplotlib.axes._subplots.AxesSubplot at 0x7f641c3abd30>"]},"metadata":{"tags":[]},"execution_count":208},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<matplotlib.figure.Figure at 0x7f641c295828>"]},"metadata":{"tags":[]}}]},{"metadata":{"id":"0t58NP5luPOg","colab_type":"text"},"cell_type":"markdown","source":["# 制作评分卡"]},{"metadata":{"id":"-mBT-8rOK3pz","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"49a6f0d2-c5f2-402b-b38e-c94a77969623","executionInfo":{"status":"ok","timestamp":1546353335222,"user_tz":-480,"elapsed":1049,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["B = 20/np.log(2)\n","A = 600 + B*np.log(1/60)\n","B,A"],"execution_count":210,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(28.85390081777927, 481.8621880878296)"]},"metadata":{"tags":[]},"execution_count":210}]},{"metadata":{"id":"oi0L8kJsK3lu","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":34},"outputId":"d9750978-2fea-434e-999b-cbbf440d0741","executionInfo":{"status":"ok","timestamp":1546353370813,"user_tz":-480,"elapsed":881,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["base_score = A - B*lr.intercept_\n","base_score"],"execution_count":211,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([481.36941636])"]},"metadata":{"tags":[]},"execution_count":211}]},{"metadata":{"id":"SuHwOLh82xtG","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":51},"outputId":"d32adb98-9461-44f3-cf17-546c1b055428","executionInfo":{"status":"ok","timestamp":1546353584907,"user_tz":-480,"elapsed":1408,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["lr.coef_[0]"],"execution_count":214,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([-0.33930438, -0.62862   , -0.0598851 , -0.83140322, -0.80333666,\n","       -0.63683291, -0.69510619, -1.96878632, -0.56497919, -0.59352962])"]},"metadata":{"tags":[]},"execution_count":214}]},{"metadata":{"id":"ebTETgC719ao","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":136},"outputId":"cef3c205-43d1-4ca9-be26-3e11f53446b2","executionInfo":{"status":"ok","timestamp":1546353725912,"user_tz":-480,"elapsed":1551,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["score_age = woeall[\"age\"] * (-B*lr.coef_[0][0])\n","score_age"],"execution_count":218,"outputs":[{"output_type":"execute_result","data":{"text/plain":["age\n","(-inf, 45.0]        -3.725526\n","(45.0, 46.975]      -8.758225\n","(46.975, 58.662]    -0.686435\n","(58.662, 64.0]       5.416515\n","(64.0, inf]         11.763414\n","dtype: float64"]},"metadata":{"tags":[]},"execution_count":218}]},{"metadata":{"id":"nxWjXJsxK3iO","colab_type":"code","colab":{}},"cell_type":"code","source":["file = \"ScoreData2.csv\"\n","#open是用来打开文件的python命令，第一个参数是文件的路径+文件名，如果你的文件是放在根目录下，则你只需要文件名就好\n","#第二个参数是打开文件后的用途，\"w\"表示用于写入，通常使用的是\"r\"，表示打开来阅读\n","#首先写入基准分数\n","#之后使用循环，每次生成一组score_age类似的分档和分数，不断写入文件之中\n","with open(file,\"w\") as fdata:\n","    fdata.write(\"base_score,{}\\n\".format(base_score))\n","for i,col in enumerate(X.columns):\n","    score = woeall[col] * (-B*lr.coef_[0][i])\n","    score.name = \"Score\"\n","    score.index.name = col\n","    score.to_csv(file,header=True,mode=\"a\")"],"execution_count":0,"outputs":[]},{"metadata":{"id":"x1MQ13eCvVGf","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":119},"outputId":"4ffb4480-1395-460c-c211-db592c9637c7","executionInfo":{"status":"ok","timestamp":1546353710558,"user_tz":-480,"elapsed":1445,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["X.columns"],"execution_count":217,"outputs":[{"output_type":"execute_result","data":{"text/plain":["Index(['age', 'RevolvingUtilizationOfUnsecuredLines', 'DebtRatio',\n","       'MonthlyIncome', 'NumberOfOpenCreditLinesAndLoans',\n","       'NumberOfTime30-59DaysPastDueNotWorse', 'NumberOfTimes90DaysLate',\n","       'NumberRealEstateLoansOrLines', 'NumberOfTime60-89DaysPastDueNotWorse',\n","       'NumberOfDependents'],\n","      dtype='object')"]},"metadata":{"tags":[]},"execution_count":217}]},{"metadata":{"id":"dpcVeZnz3Q9I","colab_type":"code","colab":{"base_uri":"https://localhost:8080/","height":187},"outputId":"a8db4af5-251d-4872-bf42-15b858aacd1f","executionInfo":{"status":"ok","timestamp":1546353921401,"user_tz":-480,"elapsed":880,"user":{"displayName":"Sen Yang","photoUrl":"","userId":"00832503676208839570"}}},"cell_type":"code","source":["[*enumerate(X.columns)]"],"execution_count":219,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[(0, 'age'),\n"," (1, 'RevolvingUtilizationOfUnsecuredLines'),\n"," (2, 'DebtRatio'),\n"," (3, 'MonthlyIncome'),\n"," (4, 'NumberOfOpenCreditLinesAndLoans'),\n"," (5, 'NumberOfTime30-59DaysPastDueNotWorse'),\n"," (6, 'NumberOfTimes90DaysLate'),\n"," (7, 'NumberRealEstateLoansOrLines'),\n"," (8, 'NumberOfTime60-89DaysPastDueNotWorse'),\n"," (9, 'NumberOfDependents')]"]},"metadata":{"tags":[]},"execution_count":219}]},{"metadata":{"id":"_zNPuEZf4EkE","colab_type":"code","colab":{}},"cell_type":"code","source":[""],"execution_count":0,"outputs":[]}]}